zoukankan      html  css  js  c++  java
  • 网店系统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     }
  • 相关阅读:
    php八种常用函数
    已知二叉树的前序中序遍历,如何得到它的后序遍历?
    PTA_Have fun with numbers(C++)
    PTA_输入符号及符号个数打印沙漏(C++)
    Web安全之SQL注入
    南京邮电大学//bugkuCTF部分writeup
    修改或添加HTTP请求头
    第二次作业
    博客作业1
    linux python 串口
  • 原文地址:https://www.cnblogs.com/iLoveMyD/p/12856550.html
Copyright © 2011-2022 走看看