在上一篇技术博客中,咱们生成的海报中包含图片,这些图片是存储到服务器上的,而canvas的drawimage函数只能读取本地文件,所以咱们在drawCanvas以前须要把服务器上的图片下载到本地临时存储,这里选择使用wx.downloadfile函数下载。html
//点击分享按钮以后触发的大函数。主要是使用downloadfile下载所需图像到本地,而后调用drawCanvas函数 //因为异步加载很差控制,因此在这里进行串行下载 头像、原海报,而后drawcanvas,不在其它地方预先下载 genPoster: function () { if (_this.data.imagePath==""){ wx.showLoading({ title: '等待图片下载', }) //获取用户信息,下载头像 console.log('下面开始获取用户信息,主要为了获得头像') util.$get('/users/current') .then((res) => { if (res.data.success) { _this.setData({ userInfo: res.data.data.data }) console.log("获取的用户信息为:") console.log(_this.data.userInfo) console.log("获得用户信息,下面将这个头像下载到临时文件夹:") console.log(_this.data.userInfo.portrait_url) wx.downloadFile({ url: _this.data.userInfo.portrait_url, //头像资源 success: function (res) { if (res.statusCode === 200) { _this.setData({ touxiang: res.tempFilePath }) console.log("成功下载头像到临时文件夹到:") console.log(_this.data.touxiang); console.log('下面将海报下载到临时文件夹:') console.log(_this.data.img_url); wx.downloadFile({ url: _this.data.img_url, //原竖版海报 success: function (res) { if (res.statusCode === 200) { _this.setData({ poster_old: res.tempFilePath }) console.log("成功下载原海报到临时文件夹为:") console.log(_this.data.poster_old) wx.hideLoading(); _this.drawCanvas(); } else { console.log("下载原海报返回的statusCode不是200") } }, fail: function (e) { console.log('下载原海报失败', e) } }) } } else { console.log("下载头像返回的statusCode不是200") } }, fail: function (e) { console.log('下载头像失败', e) } }) } }) } else{ console.log("以前画过海报了,也就是图片下载过了,如今直接drawCanvas,灰常快") _this.drawCanvas(); } },
首先须要向服务器发送请求,获得图片资源的url,接着经过wx.downloadFile函数将url图片下载到本地临时存储,wx.downloadFile的官方文档是:https://developers.weixin.qq.com/miniprogram/dev/api/network/download/wx.downloadFile.htmljava
这里尤为须要注意一个问题,因为是异步加载,因此若是须要下载多个图片的话,建议串行进行。canvas