In diesem Artikel werden hauptsächlich relevante Informationen zum Teilen von HTML5-Canvas-WeChat-Postern (persönliche Klettergrube) vorgestellt. Der Inhalt ist jetzt recht gut und dient als Referenz.
In diesem Artikel wird das Teilen von Leinwand-WeChat-Postern vorgestellt. Teilen Sie es mit allen. Die Details lauten wie folgt:
Zufällig ein Bild generieren
-
Holen Sie sich den Avatar und den Titel des WeChat-Benutzers (erhalten Sie diese, indem Sie die Back-End-Schnittstelle selbst anpassen)
Kombinieren Sie den Avatar und den Titel des Benutzers mit einem zufällig generierten Bild, um ein Poster zu erstellen
Vielleicht hat der Benutzer auf der vorherigen Seite auch den Wunschtext ausgefüllt und ihn auch in das Bild eingefügt
realisiertes Effektdiagramm
Notieren Sie die Probleme, die bei der Implementierung der Funktion aufgetreten sind
Canvas Langes Drücken im WeChat-Browser funktioniert nicht und kann nicht wie img geteilt werden (dann werde ich es in img konvertieren)
kann in den WeChat-Entwicklertools angezeigt werden Nach der Konvertierung in img ist die Maschine wirklich ungültig (ich möchte weinen, aber keine Tränen), Du Niang sagte, es könnte sein, dass das Bild domänenübergreifend ist ^-^
Das Die Benutzer-Avatar-Synthese erfordert abgerundete Ecken. Ich sagte nein, schauen Sie sich einfach die Canvas-API-Dokumentation an. Ich mag Du Niang nicht.
Wenn der Text auf der Leinwand die angegebene Breite überschreitet, muss er dies tun Ich sagte, dass ich nur verschiedene Methoden zur Textausrichtung kenne, die die angegebene Breite nicht überschreiten. ctx.textAlign = 'center' ;
Das Problem mit der Unschärfe der Leinwand auf einem hohen Definitionsbildschirm (es ist super einfach und ich weiß nicht, warum Du Niang so ausführlich ist) ist keine Canvas.witdt=innerWidth*devicePixelRatio
HTML-Struktur
<p class="imgBox" v-cloak> <img :src='imgSrc' v-if="imgSrc" / alt="Einführung in das Teilen von HTML5-Canvas-WeChat-Postern" > </p>
CSS
<style> *{ margin:0; padding:0; } body, html { width: 100%; height: 100%; } .imgBox { width: 100%; height: 100%; } img { width: 100%; display: block; } </style>
Skript
// js主要结构 new Vue({ el:'imgBox', data:{ urlParam: {},//获取url中的传值对象 randomNum: 1,//随机数用于确定那个祈福页 userName: '',//用户称呢 imgSrc: '',//合成最终图片 userImg: '',//用户头像图片 userMessage: '',//用户留言 }, methods: { // 分享到盆友圈 wxShareFriends: function () {}, // 初始化请求头 wxHttp: function () { $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } }); }, // 获取随机数[1,10] randomNumbers() { this.randomNum = Math.ceil(Math.random() * 10) }, // 获取微信用户头像和称呢和用户输入祝福语 getUserInfo() { var vm = this; $.post('API请求地址', function (data) { if (data.code == 1) { vm.userImg = data.data.headimg; vm.userName = data.data.nickname; if (vm.randomNum % 2 == 0) { vm.userMessage= '红尘相遇,年华已老。岁月花开多少不在,古往今来相遇是一件既微妙。而又神圣的事情,红尘的情网中' } else { vm.userMessage = '红尘相遇,年华已老' } } vm.$nextTick(function () { vm.drawCanvasBgImg(); }) }) }, // 获取页面dpr和宽度 getWindowInfo() { var windowInfo = {}; windowInfo.dpr = window.devicePixelRatio; if (window.innerWidth) { windowInfo.width = window.innerWidth; } else { windowInfo.width = document.body.clientWidth; } return windowInfo; }, // 画活动页分享背景大图 drawCanvasBgImg () {}, // 在背景图片的画布上截取一个圆然后填充入用户头像 drawCanvasUserImg(canvas, ctx, dpr) {}, // 填写用户称呢或者用户留言 canvasFillText (canvas, ctx, dpr, circleR) {}, // 合成base64位分享图 convertCanvasToImage (canvas) { this.imgSrc = canvas.toDataURL("image/jpeg");//png有毒在安卓机下识别二维码无法跳转 this.$Spin.hide(); } } })
Schritte der Zeichenmethode
drawCanvasBgImg ()
drawCanvasUserImg (canvas, ctx, dpr )
canvasFillText (canvas, ctx, dpr, CircleR)
-
convertCanvasToImage (canvas)
Aktivitätsseite zeichnen, Hintergrund teilen, großes Bild, drawCanvasBgImg ()
//拿到数据后开始画背景大图 想法很简单就是把图片画到canvas中然后在画布上再画头像文字让后转成img drawCanvasBgImg () { var vm = this; var canvas = document.createElement("canvas"); var ctx = canvas.getContext("2d"); var clientWidth = this.getWindowInfo().width; //获取屏幕宽度用于canvas宽度自适应移动端屏幕 var dpr = this.getWindowInfo().dpr; ctx.globalCompositeOperation = "source-atop";//** 坑锯齿感觉没什么用不知道是不是用错地方了 ** canvas.width = dpr * clientWidth; //由于手机屏幕时retina屏,都会多倍渲染,用dpr来动态设置画布宽高,避免图片模糊 canvas.height = dpr * clientWidth * 609 / 375;//去掉微信头部的状态栏应该是603 没搞懂603还是不能让图片满屏直接多加到了609 var img = new Image(); img.crossOrigin = '';//死坑的图片跨域 (img.crossOrigin = "Anonymous"这种写法还是不能显示base64格式图片) img.src = "http://xxx" + this.randomNum + ".jpg"; img.onload = function () { ctx.drawImage(img, 0, 0, canvas.width, canvas.height); vm.drawCanvasUserImg(canvas, ctx, dpr); } },
Benutzeravatar drawCanvasUserImg (canvas, ctx, dpr)
// 在背景图片的画布上截取一个圆然后填充入用户头像 drawCanvasUserImg: function (canvas, ctx, dpr) { var vm = this; var circleR = 50 * dpr;//半径 var circleX = canvas.width / 2;//圆心X坐标 var circleY = 50 * dpr;//圆心Y坐标 var imgX = circleX - circleR;//图片X开始坐标 var imgY = circleY - circleR;//图片Y开始坐标 var imgWidth = 2 * circleR;//图片按圆形大小 var img = new Image(); img.crossOrigin = ''; img.src = this.userImg; img.onload = function () { ctx.save(); // 保存当前ctx的状态 ctx.arc(circleX, circleY, circleR, 0, 2 * Math.PI); //画出圆 ctx.clip(); //裁剪上面的圆形 ctx.drawImage(img, imgX, imgY, imgWidth, imgWidth); // 在刚刚裁剪的园上画图 ctx.restore(); // 还原状态 vm.canvasFillText(canvas, ctx, dpr, circleR); } },
Text auf Leinwand zeichnen
// 填写用户称呢或者用户留言 canvasFillText (canvas, ctx, dpr, circleR) { var fontSizeThis = dpr * 20 + 'px' + ' Arial'; var userNameY = 0;//用户名Y轴坐标 var userMessageX = dpr * 40;//用户留言X轴坐标 var userMessageY = 0;//用户留言Y轴坐标 var lastSubStrIndex = 0;//字符串下标 var lineWidth = 0;//一行宽度 var allTextWidth = 0;//所有字符宽度 ctx.font = fontSizeThis; // 需要用户名是写入用户名 if (this.userName) { userNameY = circleR * 2.5; ctx.fillStyle = "#0094ff"; ctx.textAlign = 'center'; ctx.fillText(this.userName, canvas.width / 2, userNameY); } if (this.userMessage) { userMessageY = userNameY + dpr * 35; ctx.fillStyle = "#000"; // 获取字符宽度 for (var i = 0; i < this.userMessage.length; i++) { allTextWidth += ctx.measureText(this.userMessage[i]).width; } // 字符串长度大于画布区域要换行 if (allTextWidth > canvas.width - 2* userMessageX) { for (var i = 0; i < this.userMessage.length; i++) { lineWidth += ctx.measureText(this.userMessage[i]).width; if (lineWidth > canvas.width - 2*userMessageX) { ctx.textAlign = 'left'; ctx.fillText(this.userMessage.substring(lastSubStrIndex, i), userMessageX, userMessageY); userMessageY += dpr * 25;//设置行高 lineWidth = 0; lastSubStrIndex = i; } if (i == this.userMessage.length - 1) { ctx.fillText(this.userMessage.substring(lastSubStrIndex, i + 1), userMessageX, userMessageY); } } } else { // 小于者居中显示 ctx.textAlign = 'center'; ctx.fillText(this.userMessage, canvas.width / 2, userMessageY); } } this.convertCanvasToImage(canvas); },
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er für das Lernen aller hilfreich ist. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.
Verwandte Empfehlungen:
Leinwand, um den Effekt eines dynamischen Ballüberlappungscodes zu erzielen
Leinwand, um den Effekt der Liebe zu erzielen und Regenbogenregen
So implementieren Sie den Elementbild-Spiegel-Flip-Animationseffekt auf Leinwand
Das obige ist der detaillierte Inhalt vonEinführung in das Teilen von HTML5-Canvas-WeChat-Postern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

HTML5 bringt fünf wichtige Verbesserungen mit sich: 1. Semantische Tags verbessern die Code -Klarheit und SEO -Effekte; 2. Multimedia Support vereinfacht Video- und Audio -Einbettung; 3. Form -Verbesserung vereinfacht die Überprüfung; 4. Offline und lokaler Speicher verbessert die Benutzererfahrung. 5. Leinwand- und Grafikfunktionen verbessern die Visualisierung von Webseiten.

Die Kernmerkmale von HTML5 sind semantische Tags, Multimedia -Support, Offline -Speicher und lokaler Speicher sowie Form. 1. Semantische Tags wie usw., um die Code -Lesbarkeit und SEO -Effekt zu verbessern. 2. Vereinfachen Sie die Multimedia -Einbettung mit Etiketten. 3. Offline-Speicher und lokaler Speicher wie ApplicationCache und LocalStorage unterstützen den netzwerkfreien Betrieb und die Datenspeicherung. 4. Formularverbesserung führt neue Eingangstypen und Überprüfungseigenschaften ein, um die Verarbeitung und Überprüfung zu vereinfachen.

H5 bietet eine Vielzahl neuer Funktionen und Funktionen und verbessert die Fähigkeiten der Front-End-Entwicklung erheblich. 1. Multimedia-Unterstützung: Einbetten von Medien und Elementen, keine Plug-Ins sind erforderlich. 2. Leinwand: Verwenden Sie Elemente, um 2D -Grafiken und -Animationen dynamisch zu rendern. 3. Lokaler Speicher: Implementieren Sie die persistente Datenspeicherung über LocalStorage und SessionStorage, um die Benutzererfahrung zu verbessern.

H5 und HTML5 sind verschiedene Konzepte: HTML5 ist eine Version von HTML, die neue Elemente und APIs enthält. H5 ist ein Rahmen für mobile Anwendungsentwicklungen, die auf HTML5 basieren. HTML5 pariert und rendert Code über den Browser, während H5 -Anwendungen Container ausführen und über JavaScript mit nativem Code interagieren müssen.

Zu den wichtigsten Elementen von HTML5 gehören ,,,,,, usw., mit denen moderne Webseiten erstellt werden. 1. Definieren Sie den Kopfinhalt, 2. Zum Navigieren durch den Link, 3. darstellen den Inhalt unabhängiger Artikel, 4. organisieren Sie den Seiteninhalt, 5. Zeigen Sie den Seitenleisteninhalt an, 6. Definieren Sie die Fußzeile. Diese Elemente verbessern die Struktur und Funktionalität der Webseite.

Es gibt keinen Unterschied zwischen HTML5 und H5, der Abkürzung von HTML5. 1.HTML5 ist die fünfte Version von HTML, die die Multimedia- und interaktiven Funktionen von Webseiten verbessert. 2.H5 wird häufig verwendet, um auf HTML5-basierte mobile Webseiten oder -anwendungen zu verweisen, und eignet sich für verschiedene mobile Geräte.

HTML5 ist die neueste Version der Hypertext -Markup -Sprache, die von W3C standardisiert wurde. HTML5 führt neue semantische Tags, Multimedia -Support- und Form -Verbesserungen ein, verbessert die Webstruktur, die Benutzererfahrung und die SEO -Effekte. HTML5 führt neue semantische Tags vor, wie z. HTML5 unterstützt Multimedia-Elemente und es sind keine Plug-Ins von Drittanbietern erforderlich, wodurch die Benutzererfahrung und die Ladegeschwindigkeit verbessert werden. HTML5 verbessert die Formfunktionen und führt neue Eingangstypen wie usw. ein, die die Effizienz der Benutzererfahrung und der Form von Formularverifizierung verbessert.

Wie schreibe ich sauberen und effizienten HTML5 -Code? Die Antwort besteht darin, häufige Fehler zu vermeiden, indem Tags, strukturierte Code, Leistungsoptimierung und die Vermeidung häufiger Fehler vermieden werden. 1. Verwenden Sie semantische Tags wie usw., um die Code -Lesbarkeit und SEO -Effekt zu verbessern. 2. Halten Sie den Code strukturiert und lesbar, wobei entsprechende Eindrücke und Kommentare verwendet werden. 3. Optimieren Sie die Leistung, indem Sie unnötige Tags reduzieren, CDN- und Komprimierungscode. V.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

PHPStorm Mac-Version
Das neueste (2018.2.1) professionelle, integrierte PHP-Entwicklungstool

VSCode Windows 64-Bit-Download
Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

MantisBT
Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

Dreamweaver CS6
Visuelle Webentwicklungstools
