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); } });
canvas 2d 报错 toTempFilePath:fail invalid viewid?模拟器没问题,真机一直报 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) } },
2022-07-06同问 真机安卓正常、IOS不行;望回复
ios使用canvasToTempFilePath报错https://developers.weixin.qq.com/miniprogram/dev/api/canvas/wx.canvasToTempFilePath.html 安卓使用是没问题,ios使用报fail invalid viewid
2022-07-06我也遇到这个问题;你们解决了吗!
组件 slot 渲染位置不正确[图片]
2020-05-06