出现问题的需求是,使用Canvas组件画出的图可以切换背景图,就是需要在页面上根据传入图片值不断重构新的Canvas,在开发者工具中可以正常重构、保存新图片到本地。
但是发布到手机真机测试时出现问题,接口已经成功返回新的图片,控制台也打印保存到本地的图片地址是新图地址,但是Canvas并没有更新新图,一直是第一次画的图片地址,实际保存到本地的也是第一次的图片
保存图片使用wx.downloadFile,返回值是正常的新图地址,就是Canvas不更新新图
第一次画图使用的
const query = wx.createSelectorQuery().in(that);
(query as any)
.select("#sharePic")
.fields({ node: true, size: true })
.exec((res) => {
const canvas = res[0].node;
const ctx = canvas.getContext("2d");
const dpr = wx.getSystemInfoSync().pixelRatio;
canvas.width = 750 * 1;
canvas.height = 1220 * 1;
ctx.scale(1, 1);
const CanvasD = new CanvasDraw(canvas, ctx);
that.CanvasD = CanvasD;
that.canvasImage = ""
CanvasD.DrawImg2d(that.canvasImagebg).then(() => {
CanvasD._canvasToPath(that).then((res: string) => {
console.log("背景图canvasImage-----------", res)
that.canvasImage = res;
WXAppSDK.hideLoading();
});
});
});
第二次画图时先清空当前canvas,再次调用1的方法重新画图
const that = this;
const query = wx.createSelectorQuery().in(that);
(query as any)
.select("#sharePic")
.fields({ node: true, size: true })
.exec((res) => {
const canvas = res[0].node;
const ctx = canvas.getContext("2d");
//清空画布
canvas.width = 750 * 1;
canvas.height = 1220 * 1;
ctx.clearRect(0,0,canvas.width,canvas.height)
that.canvasImage = ""
console.log("清空画布")
})
保存图片
wx.downloadFile({
url: url,
success: (res) => {
wx.saveImageToPhotosAlbum({
filePath: canvasImage,
success: (img) => {
console.log("图片保存成功",img, canvasImage);
WXAppSDK.errorMessage("图片保存成功");
},
fail: () => {
WXAppSDK.errorMessage("图片保存失败");
}
});
}
});
开发者工具中图片都能正常重构,真机中可以重构成功返回新图片地址,但是canvas不更新新图片,保存图片也是旧图
你好,麻烦提供出现问题的具体机型、微信版本号、系统版本号,以及能复现问题的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)
找到问题是createImage创建对象时,开发者工具中正常返回图片,但是在手机中无返回值