最近项目有个功能产品列表,能够将不一样产品生成不一样的二维码,扫码能够进入对应的产品详情页,同时二维码须要带公司logo,须要能够长按调起微信的下载图片的功能,其实也就是说,最后生成的二维码是一个图片html
<div id="qrcode" class="qrcode clip"></div>
<canvas id="myCanvas" width="200" height="200" class="qrcode clip"></canvas>
<img id="canvasImg" alt="" width="200" height="200" class="qrcode">
let src = "/static/imgs/settle.png"; //想显示的二维码中间的图片
$("#qrcode").qrcode({
render: "canvas", //设置渲染方式,有table和canvas,使用canvas方式渲染性能相对来讲比较好
text: ``, //扫描二维码后显示的内容,能够直接填一个网址,扫描二维码后自动跳向该连接
width: "200", //二维码的宽度
height: "200", //二维码的高度
background: "#ffffff", //二维码的后景色
foreground: "#000000", //二维码的前景色
src: src //二维码中间的图片
});
复制代码
这样操做你们会发现已经显示了带logo的二维码,细心的同窗会发现,当咱们在手机中打开页面时,并不能调起长按保存二维码,缘由是咱们拿插件生成是canvas并非img,因此后面咱们要进入真正的主题,利用canvas生成图片前端
convertCanvasToImage() {
var canvas = $("#qrcode canvas")[0].toDataURL("image/png")
return canvas
}
复制代码
export function creatEwm(base64, canvas,callback) {
var ctx = canvas.getContext("2d");
var img = document.createElement('img');
img.src = '/static/imgs/icon-phone.png'
img.onload = function () {
var imgUpload = new Image();
imgUpload.src = base64();
imgUpload.onload = function () {
// 绘制
ctx.drawImage(imgUpload, 0, 0, 200, 200);
ctx.drawImage(img, 78, 80, 40, 40);
callback(canvas.toDataURL("image/png"))
};
}
}
复制代码
creatEwm(this.convertCanvasToImage, document.getElementById('myCanvas'), function (dataUrl) {
document.getElementById("canvasImg").src = dataUrl
})
复制代码
以上就完成了前端去生成二维码,且封装后,在页面中写入的代码不多,就能够实现不一样的二维码带不一样的信息,且能够调起长按下载图片。vue