关于uniapp 小程序base64编码图片无法使用canvas绘制的问题
·
最近有做一个新需求,保存收款二维码海报,我使用的是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)即可成功绘制。
更多推荐
所有评论(0)