将两张图片合成一张, 原理是利用canvas技术,先画一张画布,然后在画布上画第一张图,后面在第一张图的基础上指定位置画第二张图。可以说是有三层,底层是张画布,中间层是第一张图,上层是第二张图。一般第二张图尺寸要小于第一张图的, 不然就遮盖住了中间层的图了。
先上图看看
现在我们需要将二维码图片放到海报二维码预留的空白区域,制作出完整的海报图。
上代码:
<div> <img id="qrcode" src="/img/promotion/qrcode.png" alt="二维码"> <img id="poster" src="/img/promotion/poster.png" alt="海报模板"> <img id="myPoster" alt="合成海报"> </div> <button ng-click="drawPosterImage()">合成图片</button>
js部分:
//生成海报
$scope.drawPosterImage = function(){
var canvas;
canvas = document.createElement("canvas");
canvas.width = 1242;
canvas.height = 2208;
var context = canvas.getContext("2d");
context.rect(0 , 0 , canvas.width , canvas.height);
context.fillStyle = "#fff";
context.fill();
var myImage2 = new Image();
myImage2.src = $("#poster").attr("src");
myImage2.crossOrigin = 'Anonymous';
myImage2.onload = function(){
context.drawImage(myImage2 , 0 , 0 , 1242 , 2208);
var myImage = new Image();
myImage.src = $("#qrcode").attr("src");
myImage.crossOrigin = 'Anonymous';
myImage.onload = function(){
context.drawImage(myImage , 499 , 1703 , 243 , 243);
var base64 = canvas.toDataURL("image/png"); //获取base64的图片流
var img = document.getElementById('myPoster');
img.setAttribute('src' , base64);
}
}
}