# 问题

// 保存图片到相册
const imageTempPath = 'xxxxx'
Taro.saveImageToPhotosAlbum({
    filePath: imageTempPath
}).then(res=>{
    console.log(res)
})
1
2
3
4
5
6
7

注意 saveImageToPhotosAlbum需要用户授权 scope.writePhotosAlbum。

我们知道,当一个有url的图片,我们直接使用上面代码就可以轻松的保存到本地,可是有时候我们的图片会是base64位的数据图片,上面的代码就无效了,那么我们如何解决呢。

# Taro.getFileSystemManager()

这个api官网介绍是说,获取全局唯一的文件管理器。

然后我们就可以这样:

const saveImage = async () => {
    var fileSystemManager = Taro.getFileSystemManager();
    var number = Math.random();
    fileSystemManager.writeFile({
        filePath: Taro.env.USER_DATA_PATH + "/pic" + number + ".png",
        data: img,
        encoding: "base64",
        success: res => {
        Taro.saveImageToPhotosAlbum({
            filePath: Taro.env.USER_DATA_PATH + "/pic" + number + ".png",
            success: function() {
            Taro.showToast({
                title: "保存图片成功",
                icon: "success",
                duration: 2000
            });
            },
            fail: function(err) {
            console.log(err);
            if (res.errMsg.indexOf("saveImageToPhotosAlbum:fail")) {
                Taro.showToast({
                title: "请在设置中打开相册权限",
                icon: "none",
                duration: 2000
                });
            }
            }
        });
        console.log(res);
        },
        fail: err => {
        console.log(err);
        }
    });
};
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

打开调试工具,发现这样写就可以顺利的保存base64图片了。

其实个人认为还是用canvas去画最好了,也不用去找这些冷门的api,毕竟这base64的图片是后台返的,我们也不好说,只能这样来了,如果要画海报,还是直接前端来,没那么多事。

更新于: 8/3/2020, 11:55:40 AM