之前公司的项目有很多运用到拍照压缩上传,现在项目要求整合,于是打算封装成组件直接调用。
在页面上直接调用正常,封装成自定义组件后发现利用canvas压缩图片后获取图片路径一直报错
canvasToTempFilePath: fail canvas is empty。
经查询官方文档提示自定义组件
在自定义组件下,当前组件实例的this,以操作组件内 canvas 组件
var _self = this;
ctx.draw(false, setTimeout(function() {
wx.canvasToTempFilePath({
canvasId: 'uploadcanvas',
destWidth: canvasWidth,
destHeight: canvasHeight,
success: function(res) {
console.log("压缩最终图片路径", res.tempFilePath) //最终图片路径
_self.upImgOss(res.tempFilePath,ctx)
},
fail: function(res) {
wx.showToast({
title: JSON.stringify(res),
icon: "none",
duration: 3000
});
},
complete: res =>{
wx.hideLoading();
}
}, _self)
}, 600)) // 这里指该组件的this
经过修改后获取成功,但是打开全是黑的没有图,于是排查canvas是否画出来图片,结果显示全是空白,也没有任何报错。排查了半天才发现在创建画布的时候也需要this当前组件,不得不说真坑!
var _self = this;
const ctx = wx.createCanvasContext('uploadcanvas',_self); //创建画布