今回は、WeChatの公開アカウントポスターを作るためのjsとcanvasの写真を合成する機能についてお届けします jsとcanvasの写真を合成してWeChatの公開アカウントポスターを作る際の注意事項は以下の通りです。実用的なケースを一度見てみましょう。 WeChat 公開アカウントの開発では、独自の QR コード ポスターを生成したり、共有ポスターを生成したりするために、写真、アバター、ニックネーム、またはその他のデータを追加する必要がよくあります
この要件については、PHP の gd ライブラリで実現できます。 , しかし、画像合成にサーバーを使用するとサーバーリソースを大量に消費します
そこで、以下のような方法で実装することが考えられます
1つ: JSキャンバスの画像合成方法
$(function () { draw(function () {//生成之后的回调 $('#img')[0].innerHTML='<img alt="js とキャンバスで写真を合成して WeChat 公開アカウントのポスターを作成する" >';//将base生成图片 }); }); var data=[图片1地址,图片2地址,图片3地址]; base64=[];//用于保存生成之后的base64 function draw(fn) { var img1= new Image; img1.src = data[0]; img1.onload = function () {//这步必须,因为图片加载是异步的,必须等图片加载完成才开始下面的这些步骤 var c = document.createElement('canvas'), ctx = c.getContext('2d'); c.width = img1.naturalWidth; c.height = img1.naturalHeight; ctx.rect(0, 0, c.width, c.height); ctx.fillStyle = '#fff'; ctx.fill(); //生成一张图片1的底图 /*下面是为底图增加上文字*/ ctx.drawImage(img1, 0, 0, c.width, c.height);(绘制图片资源,x坐标,y坐标,宽,高) //设置字体样式 ctx.font = "24px Courier New"; //设置字体填充颜色 ctx.fillStyle = "write"; //从坐标点(92,800)开始绘制文字 ctx.fillText("这是文字内容", 92, 800); /*上面是增加文字,可以无限加*/ var img2= new Image; img2.src = data[1]; img2.onload = function () {//同理,如果是加载图片的话,需要等图片加载出来再下一步,所以要加onload ctx.drawImage(img2, 245, 660, 150, 150);(绘制图片资源,x坐标,y坐标,宽,高) base64.push(c.toDataURL("image/jpeg", 1));//如果绘制完成了,就把base64数据填进数组,然后回调,没完成则继续这步 fn();//回调 }; }; } ///如果是坐标相同,或者觉得代码这样不美观的,可以使用递归方法实现onload的步骤,例如: function draw(fn) { a(0); fn(); } function a(i){ if (i == 0) { var img1= new Image; img1.src = data[0]; img1.onload = function () { var c = document.createElement('canvas'), ctx = c.getContext('2d'); c.width = img1.naturalWidth; c.height = img1.naturalHeight; ctx.rect(0, 0, c.width, c.height); ctx.fillStyle = '#fff'; ctx.fill(); //生成一张图片1的底图 /*下面是为底图增加上文字*/ ctx.drawImage(img1, 0, 0, c.width, c.height);(绘制图片资源,x坐标,y坐标,宽,高) //设置字体样式 ctx.font = "24px Courier New"; //设置字体填充颜色 ctx.fillStyle = "write"; //从坐标点(92,800)开始绘制文字 ctx.fillText("这是文字内容", 92, 800); /*上面是增加文字,可以无限加*/ a(1);//到第2个步骤 } } else if (i == 1) { var img2= new Image; img2.src = data[1]; img2.onload = function () {//同理,如果是加载图片的话,需要等图片加载出来再下一步,所以要加onload ctx.drawImage(img2, 245, 660, 150, 150);(绘制图片资源,x坐标,y坐标,宽,高) base64.push(c.toDataURL("image/jpeg", 1));//如果绘制完成了,就把base64数据填进数组,然后回调,没完成则a(2)到第三步; return; }; } }
2つ: html2canvasを使用してWebページを画像に保存する / / html2canvas.js を導入する必要があります
<div> <img alt="js とキャンバスで写真を合成して WeChat 公開アカウントのポスターを作成する" > <img alt="js とキャンバスで写真を合成して WeChat 公開アカウントのポスターを作成する" > <span><img alt="js とキャンバスで写真を合成して WeChat 公開アカウントのポスターを作成する" >文字</span> <div></div> </div> //使用css进行网页布局
$(window).load(function(){ var shareContent = $(".qrbg")[0]; var width = shareContent.offsetWidth; var height = shareContent.offsetHeight; $(".qrcodepic").height(height); var canvas = document.createElement("canvas"); var scale = 2; canvas.width = width * scale; canvas.height = height * scale; canvas.getContext("2d").scale(scale, scale); var rect = shareContent.getBoundingClientRect(); canvas.getContext("2d").translate(-rect.left,-rect.top); var opts = { scale: scale, canvas: canvas, width: width, height: height, useCORS:true }; html2canvas($(".qrcodepic"), opts).then(function (canvas) { dataURL =canvas.toDataURL("image/png"); $(".qrcodemain").html("<img alt="js とキャンバスで写真を合成して WeChat 公開アカウントのポスターを作成する" >"); }); });
この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、PHP 中国語 Web サイトの他の関連記事に注目してください。
推奨読書:
JQ を使用して右クリックして Web ページをブックマークする方法 jQuery がマスターする必要がある API プログレスバーアニメーション付きのファイルアップロードを実装する方法 jQuery が多層検証を実装した後 フォーム検証以上がjs とキャンバスで写真を合成して WeChat 公開アカウントのポスターを作成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。