最近一直在开发小程序,做了一个自动抠图的功能。很多人可能需要将照片的背景去除,但是又不会ps怎么办?这个一键抠图就是解决这个问题。
我的预想是将自动抠图的照片保存为output_原文件名
的形式。所以有了以下代码步骤: wx.downloadFile
-> wx.getFileSystemManager().rename
-> wx.saveImageToPhotosAlbum
原代码方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| downloadImage() { const that = this; if (!this.data.resultImageSrc) { wx.showToast({ title: '没有可下载的图片', icon: 'none' }); return; } const fileName = app.utils.extractFileNameFromUrl(this.data.resultImageSrc); wx.downloadFile({ url: this.data.resultImageSrc, success(res) { if (res.statusCode === 200) { const tempFilePath = res.tempFilePath; const newFilePath = `${wx.env.USER_DATA_PATH}/${fileName}`; wx.getFileSystemManager().rename({ oldPath: tempFilePath, newPath: newFilePath, success() { wx.saveImageToPhotosAlbum({ filePath: newFilePath, success() { wx.showToast({ title: '图片下载成功', icon: 'success' }); }, fail() { wx.showToast({ title: '保存图片失败', icon: 'none' }); } }); }, fail() { wx.showToast({ title: '重命名文件失败', icon: 'none' }); } }); } else { wx.showToast({ title: '下载图片失败', icon: 'none' }); } }, fail() { wx.showToast({ title: '请求下载失败', icon: 'none' }); } }); }
|
在开发环境中测试是正常的,图片能够正常重命名并且也能够下载下来。结果上线后发现实际并不能正常下载😂
一翻查找资料之后发现保存系统相册重命名还不能使用wx.getFileSystemManager().rename
,遂对代码进行调整如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| wx.downloadFile({ url: this.data.resultImageSrc, filePath: `${wx.env.USER_DATA_PATH}/${fileName}`, success(res) { if (res.statusCode === 200) { const tempFilePath = res.filePath; wx.saveImageToPhotosAlbum({ filePath: tempFilePath, success() { wx.showToast({ title: '图片下载成功', icon: 'success' }); }, fail() { wx.showToast({ title: '保存图片失败', icon: 'none' }); } }); } else { wx.showToast({ title: '下载图片失败', icon: 'none' }); } }, fail() { wx.showToast({ title: '请求下载失败', icon: 'none' }); } });
|
主要区别就是去除了wx.getFileSystemManager().rename
这个重命名方法,而是直接在wx.downloadFile
中添加重命名的文件名称即可。