最近在开发“生成小程序码”功能,由于小程序canvas组件在真机中无法渲染base64格式的图片,所以使用writeFile方法在客户端创建图片的思路实现。
但发现,如果图片名字是一样的话,尽管“小程序码接口”每次返回的ArrayBuffer数据不一样,安卓机还是会出现图片不更新的情况。于是思路变成,创建一个目录,每次在这个目录下生成随机名字的图片,为避免造成缓存过大,每次生成图片前都清空目录。
以下代码中使用了开发者文档中的一个二维码,所以存在跨越问题,请勾选
js代码
const dir = wx.env.USER_DATA_PATH + '/test';
Page({
data: {
codeSrc: ''
},
onLoad: function (options) {
this.createPhoto();
},
createPhoto() {
Promise.all([
this.getCodeBuffer(),//获取小程序码ArrayBuffer数据
this.clearFiles()//清除客户端缓存的图片,避免缓存过大,留意方法里的注释
])
.then(res => {
return this.writeFile(res[0].result.buffer);//在客户端创建一个图片