最近有做一个新需求,保存收款二维码海报,我使用的是canvas去绘制,我使用的是uniapp,后端返回给我的是一串base64编码。因为之前在原生小程序上是可以直接绘制base64编码,所以我就没有多想直接绘制了 坑爹的来了,在微信开发者工具上是可以绘制的,但是到了真机就空白。

后面查了才知道uniapp canvas只支持网络图片与本地图片绘制暂不支持base64编码,所以我第一时间想到将base64编码转为本地临时文件然后去绘制,试了多种方法都行不通,最后选择去看了微信官方文档,发现有wx.FileSystemManager.writeFile方法。

附上代码块。

             let code = imgurl; // 后台返回的base64图片,没有带data:image/png;base64,的前缀。
				let src = `data:image/png;base64,${code}`;
				const fsm = wx.getFileSystemManager(); // 获取文件管理器
				const buffer = wx.base64ToArrayBuffer(code); //  将 base64 字符串转成 ArrayBuffer 对象
				const fileName = wx.env.USER_DATA_PATH + '/share_img.png'; // 文件系统中的用户目录路径 (本地路径)
				/**
				 * @param fileName: 文件路径
				 * @param buffer : 要写入的文本或二进制数据
				 * @param binary: 指定写入文件的字符编码
				 */
				fsm.writeFileSync(fileName, buffer, 'binary'); // 写入文件, 同步方法

最后    ctx.drawImage(fileName)即可成功绘制。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐