模拟器没问题,真机一直报 toTempFilePath:fail invalid viewid?
业务是当前页面 需要点击进入别的页面填写内容,然后带参数返回 然后画海报保存
当前页面画直接画海报没问题,返回一直报 toTempFilePath:fail invalid viewid?
onReady() {
this.drawImage()
},
drawImage: function () {
let that = this
const query = wx.createSelectorQuery()
query.select('#myCanvas')
.fields({
node: true,
size: true
})
.exec((res) => {
const canvas = res[0].node
const canvasRes = res[0]
const ctx = canvas.getContext('2d')
const dpr = wx.getSystemInfoSync().pixelRatio
that.setData({
canvas ,
canvasRes,
ctx,
dpr
})
})
},
drawImageDetail() {
try {
let userInfo = this.data.userInfo
let canvasRes = this.data.canvasRes
let canvas = this.data.canvas
let dpr = this.data.dpr
let ctx = this.data.ctx
let that = this
canvas.width = canvasRes.width * dpr
canvas.height = canvasRes.height * dpr
ctx.scale(dpr, dpr)
ctx.fillStyle = 'white'
ctx.fillRect(0, 0, canvas.width, canvas.height)
ctx.font = '14px DINCondensed-Bold'
ctx.fillStyle = '#BEC5CC'
ctx.fillText(`生成海报`, 0, 0);
setTimeout(() => {
wx.canvasToTempFilePath({
canvas: canvas,
success(res) {
console.log(res.tempFilePath)
},
fail(res){
console.log(res)
}
})
}, 400)
} catch (error) {
console.log(error)
}
},
ios离屏canvas, toTempFilePath:fail invalid viewid
这个解决
const b64Data = ctx.canvas.toDataURL();
const time = new Date().getTime();
const filePath = `${uni.env.USER_DATA_PATH}/temp_image_${time}.png`;
// base64格式的图片要去除逗号前面的部分才能正确解码
const buffer = uni.base64ToArrayBuffer(b64Data.substring(b64Data.indexOf(',') + 1));
// 写入临时文件
uni.getFileSystemManager().writeFile({
filePath,
data: buffer,
encoding: 'utf8',
success: res => {
console.log('保存图片:', res, filePath);
resolve(filePath);
},
fail:(err:any)=>{ resolve(tempFilePaths); }
});
我TM终于解决了这个问题:
代码问题哈,兄弟们,canvas本身或者他的父级容器,一定不能用wx:if 和 hidden;
只要你不用,就应该可以解决!想隐藏就是用,absolute定位出外界即可!
请问解决了吗?我也遇到这个问题了
都2023了,这问题还存在
看你描述是在当前页面画海报没问题,就是去别的页面后返回就会报这个错。我也是相同的问题,进去后直接画没有问题,退出去后再进来就报错了。
复现代码
解决了嘛。 两年了都~
请问解决了吗?我就是在刚进来的时候请求并存储了一下这个绘图的路径,如果已经有了就直接显示,否则再去请求绘图,这样做就是想让绘图快点嘛,但是我在两个canvas页面切换的时候就出现这情况了,,,单独一个页面好像没问题,。。。但是模拟器没有问题,就是ios上切换的时候出现的。。。
canvas 2d不支持真机调试,可以使用真机预览