只要是一张可以正常查看的图片,一般老说通过 canvas 就可以将这个图片直接绘制出来。但是在微信小程序里面canvas 有一个坑就是不能够直接利用网络图片进行绘制。这在微信开发者工具中模拟是正常的,但是在手机端则显得力不从心了 — 画不出来啊!!!
不过,并不是没有解决方案。通过使用 wx.getImageInfo 的方式可以将网络图片缓存下来,然后我们使用缓存的图片地址来进行画图。效果是相当的漂亮了。
下面来实现一个小程序画图并保存的功能:
创建画布
1
| <canvas canvas-id="huahua" />
|
获取网络图片并缓存
1 2 3 4 5 6 7 8 9 10
| wx.getImageInfo({ src: 'https://xxxx.png', success: res => { wx.setStorageSync('pic', { path: res.path, width: res.width, height: res.height }); } });
|
绘制图片
1 2 3 4 5 6
| let picObj = wx.getStorageSync('pic'); if (picObj && picObj.path) { let ctx = wx.createCanvasContext('2d'); ctx.drawImage(picObj.path, 0, 0, picObj.width, picObj.height); ctx.draw(true); }
|
保存图片
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| wx.canvasToTempFilePath({ canvasId: 'huahua', success: res => { wx.saveImageToPhotosAlbum({ filePath: res.tempFilePath, success: info => { console.log(info); }, fail: err => { console.log(err); } }); }, fail: err => { console.log(err); } });
|
base64位的图片在模拟器上也是可以画出来的,但是在真机上画不出来,可以将 base64位换成网络 url 形式的图片再进行操作。