小程式中將base64圖片儲存到相簿中的方法介紹

不言
發布: 2018-12-14 10:30:28
轉載
5539 人瀏覽過

這篇文章帶給大家的內容是關於小程式中將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),
            encoding: 'base64',
            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)
            }
        })
    }
}
登入後複製

以上是小程式中將base64圖片儲存到相簿中的方法介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:segmentfault.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!