小程序開發-保存圖片到(dào)相冊 - 新聞資訊 - 雲南小程序開發|雲南軟件開發|雲南網站建設-昆明融晨信息技術有限公司

159-8711-8523

雲南網建設/小程序開發/軟件開發

知識

不(bù)管是(shì)網站,軟件還是(shì)小程序,都要(yào / yāo)直接或間接能爲(wéi / wèi)您産生價值,我們在(zài)追求其視覺表現的(de)同時(shí),更側重于(yú)功能的(de)便捷,營銷的(de)便利,運營的(de)高效,讓網站成爲(wéi / wèi)營銷工具,讓軟件能切實提升企業内部管理水平和(hé / huò)效率。優秀的(de)程序爲(wéi / wèi)後期升級提供便捷的(de)支持!

您當前位置>首頁 » 新聞資訊 » 小程序相關 >

小程序開發-保存圖片到(dào)相冊

發表時(shí)間:2021-1-6

發布人(rén):融晨科技

浏覽次數:50

在(zài)做小程序項目的(de)時(shí)候,有需求要(yào / yāo)做一個(gè)開票功能,開票之(zhī)後自然就(jiù)需要(yào / yāo)查看發票,在(zài)讓後台做成圖片返回之(zhī)後,我想了(le/liǎo)一下,查看發票除了(le/liǎo)需要(yào / yāo)看發票圖片,提供預覽圖片可以(yǐ)放大(dà)縮小看外,最好應該還要(yào / yāo)有一個(gè)保存圖片的(de)功能吧。

剛好微信小程序提供了(le/liǎo)預覽和(hé / huò)保存相冊兩個(gè)API,就(jiù)正好用上(shàng)。因爲(wéi / wèi)預覽比較簡單,我就(jiù)隻是(shì)把保存相冊的(de)開發流程寫下來(lái),供大(dà)家也(yě)供自己往後參考了(le/liǎo),有什麽問題大(dà)家可以(yǐ)直接指正。

步驟一:編寫HTML布局結構:

<button class="default-btn" hover-class="default-btn-active" bindtap="saveInvoice">保存</button>

布局裏一個(gè)按鈕,是(shì)調起保存相冊API的(de),也(yě)就(jiù)保存功能的(de)按鈕。

步驟二:編寫調用保存相冊API的(de)邏輯代碼:

因爲(wéi / wèi)保存相冊API中的(de)filePath參數是(shì)需要(yào / yāo)圖片文件路徑的(de),而(ér)我拿到(dào)的(de)是(shì)圖片的(de)base64數據,所以(yǐ)需要(yào / yāo)結合writeFile()的(de)API先把圖片文件寫入設置的(de)用戶路徑,再用路徑去調用保存相冊API來(lái)完成保存操作。

是(shì)不(bù)是(shì)大(dà)家覺得這(zhè)樣寫完就(jiù)完事啦?當初我也(yě)以(yǐ)爲(wéi / wèi)是(shì)這(zhè)樣的(de),寫完之(zhī)後我自測了(le/liǎo)一下,一點按鈕就(jiù)會彈出(chū)“允許保存相冊”的(de)授權框,允許後圖片就(jiù)保存下來(lái)啦,爽歪歪~~

但是(shì),在(zài)我再次自測的(de)時(shí)候,點了(le/liǎo)按鈕發現沒有任何反應,然後通過fail的(de)監聽失敗事件發現原來(lái)是(shì)因爲(wéi / wèi)我之(zhī)前授權的(de)時(shí)候選擇了(le/liǎo)拒絕,然後點保存按鈕,它就(jiù)再也(yě)沒詢問我授權而(ér)是(shì)直接獲取了(le/liǎo)之(zhī)前拒絕的(de)授權記錄跳到(dào)失敗去了(le/liǎo)。

好吧,掉進一個(gè)坑裏,隻能撸起袖子(zǐ)填了(le/liǎo)。既然拒絕授權被記錄了(le/liǎo),那有沒有辦法在(zài)每次點保存的(de)時(shí)候查一下授權,如果未允許的(de)就(jiù)主動調起授權彈窗,這(zhè)樣就(jiù)能保證未授權的(de)會再次彈出(chū)授權彈窗,已授權的(de)就(jiù)正常調用API。

方法一:

使用wx.getSetting獲取用戶當前的(de)授權狀态,如果是(shì)未授權的(de),就(jiù)使用 wx.authorize 向用戶發起授權請求,這(zhè)樣是(shì)不(bù)是(shì)就(jiù)能達到(dào)目的(de)了(le/liǎo)。
很遺憾,經過實踐之(zhī)後發現在(zài)拒絕授權後使用這(zhè)個(gè)方法,依然是(shì)不(bù)可行的(de),沒有再重新調起授權彈窗了(le/liǎo)。(既然不(bù)成功,代碼就(jiù)不(bù)展示了(le/liǎo))

再次經過百度,發現可以(yǐ)通過調用 wx.openSetting 打開設置界面,引導用戶開啓授權,這(zhè)樣拒絕的(de)授權就(jiù)可以(yǐ)調整過來(lái)啦。

方法二:

先附上(shàng)代碼:

<button hidden='{{!openSettingBtnHidden}}' class="default-btn" hover-class="default-btn-active" bindtap="saveInvoice">保存</button>
<button hidden='{{openSettingBtnHidden}}' class="default-btn" hover-class="default-btn-active" open-type="openSetting" bindopensetting='handleSetting'>去授權</button>

/*下載發票圖片*/
  saveInvoice: function () {
    var self = this,
    timestamp = new Date().getTime(),
    file = wx.getFileSystemManager();
    file.writeFile({
      filePath: `${wx.env.USER_DATA_PATH}/invoice_${timestamp}.jpeg`,
      data: self.data.invoiceImg,
      encoding: 'base64',
      success: res => {
        self.saveToAlbum(timestamp);
      },
      fail: err => {
        showMsg('保存失敗');
      }
    });
  },
  /*保存發票圖片到(dào)用戶相冊,調用小程序API*/
  /*要(yào / yāo)考慮處理用戶拒絕授權之(zhī)後如何重新調起授權請求的(de)問題*/
  saveToAlbum: function (timestamp) {
    var self = this;
    wx.saveImageToPhotosAlbum({
      filePath: `${wx.env.USER_DATA_PATH}/invoice_${timestamp}.jpeg`,
      success: res => {
        showMsg('圖片已保存至相冊');
      },
      fail: err => {
        console.log(err);
        if (err.errMsg === 'saveImageToPhotosAlbum:fail auth deny' || err.errMsg === 'saveImageToPhotosAlbum:fail:auth denied') {
          self.setData({
            openSettingBtnHidden: false
          });
          showMsg('已拒絕授權,請點擊重新授權');
        } else {
          showMsg('保存失敗');
        }
      }
    });
  },

  /*用戶手動重新授權*/
  handleSetting: function(e) {
    var self = this;
    if (!e.detail.authSetting['scope.writePhotosAlbum']) {
      wx.showModal({
        title: '提示',
        content: '若不(bù)打開授權,則無法将圖片保存在(zài)相冊中!',
        showCancel: false
      });
      self.setData({
        openSettingBtnHidden: true
      })
    } else {
      wx.showModal({
        title: '提示',
        content: '您已授權,趕緊将圖片保存在(zài)相冊中吧!',
        showCancel: false
      })
      self.setData({
        openSettingBtnHidden: true
      })
    }
  }

思路:

  1. 首先成功的(de)邏輯還是(shì)保留,也(yě)就(jiù)是(shì)如果第一次授權用戶允許了(le/liǎo),基本上(shàng)邏輯還是(shì)一樣的(de);
  2. 在(zài)調用wx.saveImageToPhotosAlbum()API中fail監聽中添加判斷邏輯,如果是(shì)因拒絕授權而(ér)失敗的(de)情況,就(jiù)會提供重新授權的(de)按鈕。按鈕使用open-type="openSetting"開放能力,點擊就(jiù)能調起打開授權設置界面,用戶就(jiù)可以(yǐ)修改授權。
    3.用戶手動重新授權之(zhī)後的(de)處理邏輯,查詢用戶是(shì)否真的(de)允許了(le/liǎo)某個(gè)授權,若是(shì),則提示成功,讓用戶重新點擊保存即可;若否,則提醒用戶因其未授權導緻無法使用保存功能。

作者:lincimy
來(lái)源:簡書

 

相關案例查看更多