wx.canvasToTempFilePath 提示 canvasToTempFilePath: fail canvas is empty,遇到这个问题时搜了好多方案,发现一个都不管用,最后有看了下文档,才发现问题所在。
仔细看下,文档中说当使用canvas 2d时 应该应该使用canvas该属性。
这就是问题所在啊。
当使用2d时根本不用传参 canvasId,直接传入canvas实例即可。
wx.canvasToTempFilePath({
x: 0,
y: 0,
width: 300,
height: 200,
destWidth: 100,
destHeight: 100,
canvas: this.canvas,//这里是重点,获取实例的时候保存为全局变量就行了
complete(res) {
console.log(res)
}
})
小程序真是垃圾
canvasPutImageData 这个同样的报错!!!
有效+1,太坑了!!!
在单独的页面可以 但是在组件里面drow()不执行是怎么回事
有效!!!找了一下午!狗东西原来要传canvas实例,其他解决方案都是后面加this
确实有效,
canvasId: that.canvas.id,
是ios有效。安卓无效
还有一种可能是不要在<canvas canvas-id="myCanvas"></canvas>
里面指定类型
fail fail canvas is empty
谢谢谢谢,查半天,只有你这个有效
/** * 将 canvas 导出为临时图像文件 */ saveToUrl(){ return new Promise((resolve, reject)=>{ wx.canvasToTempFilePath({ canvas: this.canvas, // 画布标识,传入 canvas 组件实例 (canvas type="2d" 时使用该属性)。 // canvasId 画布标识,传入 canvas 组件的 canvas-id // destWidth: this.canvas.width, // destHeight: this.canvas.height, fileType: 'png', quality: '1', // 图片质量 success: function (res) { console.log("store success: ", res); upload(res.tempFilePath, 0).then(ress=>{ console.log("上传成功", ress) resolve(ress); }).catch(reason=>{ console.log("upload fail - reason: ", reason); reject(reason); }) }, fail: function (res) { console.log("store fail: ", res); // reject(res) }, }) }) };
canvasContext.draw(true, setTimeout(() => {
wx.canvasToTempFilePath
}, 0))
canvasContext.draw(
true,
wx.canvasToTempFilePath({
canvasId: this.canvasId, // 画布标识,传入 canvas 组件的 canvas-id
quality: 1, // 图片质量 (0, 1]
success(res) {
console.log("store success: ", res);
},
fail(res) {
console.log("store fail: ", res);
},
}, this)
)