模拟器可以正常画出,真机只能画出一部分……为什么是一部分?
模拟器:
真机:
createNewImg: function () { console.log(imgs) var that = this; var context = wx.createCanvasContext('mycanvas',this); context.setFillStyle("#ffe200") context.fillRect(0, 0, 375, 667) var gobg = imgs[0]; var touxiang = that.data.touxiang; var qrcode = imgs[1]; var name = that.data.name; var wenziBg = imgs[2]; var saomatishi = imgs[3]; //绘制二维码背景 context.rect(112.5, 350, 150, 150) context.clip(); context.drawImage(qrcode, 112.5, 350, 150, 150) context.drawImage(gobg, 0, 0, 375, 183); //绘制右下角扫码提示语 context.drawImage(saomatishi, 220, 500, 150, 180); //绘制左下角文字背景图 context.drawImage(wenziBg, 25, 560, 184, 82); context.setFontSize(12); context.setFillStyle('#333'); context.setTextAlign('left'); context.fillText("扫码进入小程序,朋友和你", 35, 580); context.stroke(); context.setFontSize(12); context.setFillStyle('#333'); context.setTextAlign('left'); context.fillText("各自获得1 0 0和50积分哦", 35, 605); context.stroke(); context.setFontSize(24); context.setFillStyle('#333333'); context.setTextAlign('center'); context.fillText(name, 187.5, 320); context.stroke(); context.setFontSize(14); context.setFillStyle('#333333'); context.setTextAlign('center'); context.fillText("邀请你一起加入小区", 187.5, 340); context.stroke(); context.setFontSize(14); context.setFillStyle('#fff'); context.setTextAlign('left'); context.fillText("扫码进入小程序", 245, 590); context.stroke(); //绘制头像 context.arc(187.5, 240, 40, 0, 2 * Math.PI,false) //画出圆 context.strokeStyle = "#ffe200"; context.clip(); //裁剪上面的圆形 context.drawImage(touxiang, 147.5, 200, 80, 80); // 在刚刚裁剪的园上画图 // context.setShadow(10, 50, 50, 'blue') // context.fillRect(10, 10, 150, 75) //最后画图 context.draw(); //将生成好的图片保存到本地,需要延迟一会,绘制期间耗时 setTimeout(function () { wx.canvasToTempFilePath({ canvasId: 'mycanvas', success: function (res) { var tempFilePath = res.tempFilePath; that.setData({ imagePath: tempFilePath, canvasHidden: true }); }, fail: function (res) { console.log(res); } }); wx.hideToast() that.setData({ maskHidden: true }); }, 2000); }, |
二维码不要去扫,随便网上找的……贴出canvas主要代码,imgs图片数组我是用递归一张一张提前下载好的,大佬求解答

已解决。
varwenziBg = imgs[2];varsaomatishi = imgs[3];//绘制二维码背景// context.rect(112.5, 350, 150, 150)// context.clip();context.drawImage(qrcode, 112.5, 350, 150, 150)在绘制二维码时不要裁剪正方形再画二维码,注释掉如图中的两行,真机效果正常。原因暂时不明,懂的大佬解释一下,也为萌新提供一个思路,需要裁剪画图的时候最好把相关画图步骤放在最后,比如这里代码画圆形头像放在最后。
真机需要先下载图片再绘制,同时注意下download域名配置
别用模拟器。 模拟器有好多bug
可以看下这个组件写法
https://github.com/jasondu/wxa-plugin-canvas