ホームページ  >  記事  >  ウェブフロントエンド  >  js とキャンバスで写真を合成して WeChat 公開アカウントのポスターを作成する

js とキャンバスで写真を合成して WeChat 公開アカウントのポスターを作成する

php中世界最好的语言
php中世界最好的语言オリジナル
2018-03-16 09:31:1911176ブラウズ

今回は、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 公開アカウントのポスターを作成する" >");
    });
});

js とキャンバスで写真を合成して WeChat 公開アカウントのポスターを作成する

js とキャンバスで写真を合成して WeChat 公開アカウントのポスターを作成する この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、PHP 中国語 Web サイトの他の関連記事に注目してください。

推奨読書:

JQ を使用して右クリックして Web ページをブックマークする方法


jQuery がマスターする必要がある API


プログレスバーアニメーション付きのファイルアップロードを実装する方法


jQuery が多層検証を実装した後 フォーム検証

以上がjs とキャンバスで写真を合成して WeChat 公開アカウントのポスターを作成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。