加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

小程序中将base64图片保存到相册中的方法介绍

发布时间:2020-12-14 20:03:30 所属栏目:资源 来源:网络整理
导读:本篇文章给大家带来的内容是关于小程序中将base64图片保存到相册中的方法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 一、授权获取 1、相关api wx.getSetting wx.authorize 2、授权获取流程一般为 是否有该权限 ——> 若无 ——>

本篇文章给大家带来的内容是关于小程序中将base64图片保存到相册中的方法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

一、授权获取

1、相关api
wx.getSetting
wx.authorize

2、授权获取流程一般为
是否有该权限 ——> 若无 ——> 调起授权弹窗 ——> 同意 ——> 使用相关api
(如果用户拒绝授权则可使用wx.opensetting引导用户前往授权设置页授权)

3、代码实现

static async weAuthCheck(type = 'address') {
    let resGetting = await new Promise((resolve,reject) => {
        wepy.getSetting({
            success: res => {
                // console.log(res,'getsetting')
                if (res.authSetting.hasOwnProperty(`scope.${type}`) && res.authSetting[`scope.${type}`]) {
                    resolve({
                        succeeded: true
                    })
                } else {
                    wepy.authorize({
                        scope: `scope.${type}`,success: () => {
                            resolve({
                                succeeded: true
                            })
                        },fail: err => {
                            // console.log(err,'errrrr')
                            resolve({
                                succeeded: false,err: err
                            })
                        }
                    })
                }
            },fail: err => {
                resolve({
                    succeeded: false,err: err
                })
            }
        })
    })
    console.log('getSetting res: n',resGetting)
    return resGetting
}

二、写入临时文件

1、相关api
文件系统
writeFile

2、参数encoding 用于说明 写入的参数data的格式是什么,并非是将data按encoding的形式写入。在这里我们应该指定encoding为base64

3、代码实现

// 先获得一个实例  this.fileManager = wx.getFileSystemManager()
this.fileManager.writeFile({
    filePath: `${wx.env.USER_DATA_PATH}/qrcode_${timestamp}.png`,data: data,encoding: 'base64',success: res => {
        console.log('res: n:',res)
    },fail: res => {
        console.log(res)
    }
})

三、格式化字符串

1、base64字符串的格式: "data:image/png;base64,...........",逗号前面这一段为格式说明,用于说明后续的内容格式是图片格式为png的base64格式。

2、如果直接将整一串字符传入,虽然可以保存成功,但是将导致图片文件格式错误。因此再做一步切割操作

let startIdx = this.qrcode.indexOf('base64,') + 7

四、完整实现

async onTapSaveQrcode() {
    let startIdx = this.qrcode.indexOf('base64,') + 7
    let resCheck = await this.$weAuthCheck('writePhotosAlbum')
    let timestamp = new Date().getTime()
    let self = this
    if (resCheck.succeeded) {
        wepy.showLoading()
        this.fileManager.writeFile({
            filePath: `${wx.env.USER_DATA_PATH}/qrcode_${timestamp}.png`,data: this.qrcode.slice(startIdx),success: res => {
                console.log('res: n:',res)
                wx.saveImageToPhotosAlbum({
                    filePath: `${wx.env.USER_DATA_PATH}/qrcode_${timestamp}.png`,success: res => {
                        self.$emit('save-qrcode-success')
                        wepy.showToast({
                            title: '保存成功'
                        })
                    },fail: err => {
                        console.log(err)
                        if (!err.errMsg.includes('cancel')) {
                            wepy.showToast({
                                title: err.errMsg,icon: 'none'
                            })
                        }
                    },complete: () => {
                        wepy.hideLoading()
                    }
                })
            },fail: res => {
                wepy.hideLoading()
                console.log(res)
            }
        })
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读