最近項目有個功能產品列表,能夠將不一樣產品生成不一樣的二維碼,掃碼能夠進入對應的產品詳情頁,同時二維碼須要帶公司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