网店系统H5版(七) js利用canvas生成分享图,商品图片+二维码+文字

2020-5-9 12:11:51 星期六

网店系统介绍

先说下效果: 左边是商品图片, 右边是二维码, 下方是一行文字

调用方法: 

1 let text = {text:'xxxx', color:'#ff9900', font:'16px Verdana'};
2 let obj = new zbImage();
3 obj.addQRTextToImage('goodsImageUrl', 'QRUrl', text, 'finalImageBoxId', 'imageClassStyle');

js类:

 1     //将二维码拼接在图片右边, 并加一行文字在下方 (无圆角处理)
 2     //依赖jquery jquery-qrcode
 3     this.addQRTextToImage = function (mainImageUrl, qrText, text, parentId, imageClass)
 4     {
 5         let image = new Image();
 6         image.onload = function () {
 7             //创建画布
 8             let canvasElement = document.createElement('canvas');
 9             let ctx = canvasElement.getContext('2d');
10 
11             //将画布改为圆角
12             let imageW = image.width;
13             let imageH = image.height;
14             let maxItemWidth = 160;
15             let textHeight = 24;
16             let w = maxItemWidth * 2; //横向两个元素
17             let h = maxItemWidth + textHeight; // 垂直图片+文字
18 
19             canvasElement.setAttribute('width', w+'px');
20             canvasElement.setAttribute('height', h+'px');
21 
22             //将画布变为圆角
23             let r = 10; //半径
24             ctx.beginPath();
25             ctx.moveTo(r, 0); //左上角弧度,右结束点
26             ctx.lineTo(w-r, 0); //画水平直线,到右上角弧度的开始点
27             ctx.arcTo(w, 0, w, r, r); //画右上角弧度
28             ctx.lineTo(w, h-r); //画垂直线, 到右下角的弧度开始点
29             ctx.arcTo(w, h, w-r, h, r); // 画右下角弧度
30             ctx.lineTo(r, h); // 画水平线, 到左下角弧度开始点
31             ctx.arcTo(0, h, 0, h - r, r); //画左下角弧度
32             ctx.lineTo(0, r); //画垂直线, 到左上角弧度开始点
33             ctx.arcTo(0, 0, r, 0, r); // 画左上角弧度
34             //ctx.strokeStyle="rgba(0,0,0,0.1)";
35             //ctx.stroke();
36             ctx.fillStyle= '#ffffff';
37             ctx.fill();
38             ctx.clip(); //重要
39 
40             //把图像剪切成 imageW*imageW, 然后缩放为 maxItemWidth, 从画布的0,0处开始渲染
41             ctx.drawImage(image, 0, 0, imageW, imageW, 0, 0, maxItemWidth, maxItemWidth);
42 
43             //生成商品二维码
44             $('#QR').qrcode({text:qrText,quiet:1});
45             let canvasQR = document.getElementById('QR').getElementsByTagName('canvas')[0];
46 
47             //将二维码画到右边
48             ctx.drawImage(canvasQR, maxItemWidth, 0, maxItemWidth, maxItemWidth);
49 
50             //在下边写上文字
51             //ctx.shadowBlur=2;
52             //ctx.shadowColor="rgba(0,0,0,0.1)";
53             ctx.font=text['font'];
54             ctx.fillStyle = text['color'];
55             let textTotalW = ctx.measureText(text['text']).width;
56             let startTxtX = (w - textTotalW) / 2;
57             ctx.fillText(text['text'],startTxtX, h-5, maxItemWidth);
58 
59             //将图片加入到指定的容器中
60             let img = document.createElement('img');
61             img.src = canvasElement.toDataURL('image/png');
62             img.setAttribute('class', imageClass);
63             let box = document.getElementById(parentId);
64             box.innerHTML = '';
65             box.appendChild(img);
66             //box.style.display = 'block';
67         };
68 
69         image.src = mainImageUrl;
70     }
原文地址:https://www.cnblogs.com/iLoveMyD/p/12856550.html