const ctx = wx.createCanvasContext('myCanvas');
let canvasW = 525;
let canvasH = 420;
// 将图片绘制到画布
// drawImage(string imageResource, number dx, number dy, number dWidth, number dHeight, number sx, number sy, number sWidth, number sHeight);
ctx.drawImage(src, 0, 0, 300, 200);
//必须要用到, 并且需要在绘制成功后导出图片
ctx.draw(false, function() {
// 导出图片
wx.canvasToTempFilePath({
width: canvasW,
height: canvasH,
destWidth: canvasW,
destHeight: canvasH,
canvasId: 'myCanvas',
fileType: 'jpg',
success: function(res) {
// res.tempFilePath为导出的图片路径
typeof cb == 'function' && cb(res.tempFilePath);
console.log("裁剪完毕");
return false;
}
});
});
首次执行该段代码,canvas显示出图片
第二次执行该段代码,canvas不显示图片,调试发现ctx.draw()第二次没有执行,什么原因?
是不是 canvas用wx:if隐藏过,然后canvas实例又没有重新初始化啊?
是啊是啊,用if隐藏了,但是我初始时,就是隐藏的,点击按钮后才显示,canvas也跟着显示
你试试用hidden,不用wx:if呢,或者每次setData显示以后都重新 wx.createCanvasContext呢
是wx:if的问题,用wx.createCanvasContext()没有解决,将if
改为hidden,问题解决
好哦,不追究原因了么~ 因为我这边也是用的 wx:if 控制的隐藏显示,正常的,可以重复draw呢。如果有兴趣的话,可以提供的代码片段,我帮你看看
我也遇到了这个问题
我遇见的问题开发者工具里:第一次能绘制成功,第二次不行了!
真机预览 没任何问题
总结下我怀疑是第一次canvas对象id没有被销毁,如第二次继续使用同id就会失败
解决办法,用时间戳生成如CanvasId1560392359912,能解决我遇见的问题
坑啊
我也是想创建一个temp canvas,用完就隐藏,要用就显示,同步的设置 showCanvas 就出这个bug
刚刚发现问题就看到你提的这个
感谢@卢霄霄 同学解决了我的问题QAQ