91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

微信小程序頁面中如何實現保存圖片

發布時間:2021-08-21 14:35:43 來源:億速云 閱讀:422 作者:小新 欄目:web開發

小編給大家分享一下微信小程序頁面中如何實現保存圖片,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!


背景

在小程序的webview里保存圖片。因為微信的js-sdk沒有提供saveImageToPhotosAlbum方法

解決思路

先加載微信js-sdk

<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>

分三步

1、html端把圖片轉為base64,然后通過postmessage傳遞給小程序

let img = new Image();
img.src = "xxxx"; //這里是圖片的src
img.crossOrigin = "anonymous"; //The opeartaion is insecure . 其它跨域的問題 自行代理解決
img.onload = function () {
  let canvas = document.createElement("canvas");
  canvas.width = img.width;
  canvas.height = img.height;
  let ctx = canvas.getContext("2d");
  ctx.drawImage(this, 0, 0);
  let imgBase64Data = canvas.toDataURL("image/jpeg", 1); //這里就拿到了base64
  wx.miniProgram.postMessage({
    data: {
      imgData: imgBase64Data, // 剛才拿到的base64 數據
    },
  });
};

2、小程序監聽postmessage拿到圖片base64數據。

// wxml
<
web - view src = "http://www.chuchur.com/save-image"
bindmessage = "getMessage" > < /web-view>

// js
Page({
    data: {
        imageData: null
    }
    getMessage(e) {
        this.setData({
            imageData: e.detail.data[0].imgData
        })
    }
})

3. 保存圖片到相冊(在小程序里)

因為拿到是base64圖片數據,首先要把它存為圖片文件。

wx.getFileSystemManager().writeFile({
  filePath: wx.env.USER_DATA_PATH + "/qrcode.png", //這里先把文件寫到臨時目錄里.
  data: this.data.imageData.slice(22), // 注意這里
  encoding: "base64",
  success: (res) => {
    console.log("success");
  },
  fail: (error) => {
    console.log(error);
  },
});

getFileSystemManager的writeFile寫入的base64是不包含圖片的頭字節的。所以要干掉data:image/jpeg;base64,等字符

有了文件路徑就可以保存到相冊了

wx.saveImageToPhotosAlbum({
  filePath: wx.env.USER_DATA_PATH + "/qrcode.png", //這是把臨時文件 保存到 相冊, 收工
  success: (res) => {
    wx.showToast({
      title: "保存成功!",
    });
  },
  fail: (error) => {
    console.log(error);
  },
});

沒有接收到?不是實時觸發?

文檔發現雖然h6中的postMessage會馬上提交信息,但是小程序并不會馬上受理,在小程序webview上的監聽函數,只會在特定時機觸發并收到消息:也就是postMessage所有的消息都只能等得分享或webview的生命周期結束才會被觸發。他是一個消息隊列:

getMessage: function(e) {
    if (e.type === 'message' && e.detail && e.detail.data && e.detail.data.length > 0) {
        e.detail.data.forEach(function(dataItem) {
            if (dataItem.type === 'qbreport' && dataItem.key) {
                // todo: yourFn(dataItem.key)
            }
        })
    }

}

所以,我們在執行保存的時候可以立馬觸發它的返回事件。

function() {
    // 此處省略
    wx.miniProgram.postMessage({
        data: {
            xxx: 'aaa'
        }
    })
    wx.miniProgram.navigateBack({
        delta: 1
    }) //注意這里.
}

完整的代碼如下:

html端代碼:

<html>
<title>webchat webview save image</title>
<header>

    <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
    </hearder>

    <body>
        <button id="saveImage" onclick="saveImage">下載圖片</button>
        <script>
            function saveImage() {
                let img = new Image()
                img.src = 'xxxx' //這里是圖片的src
                img.crossOrigin = 'anonymous' //The opeartaion is insecure , 其他跨域問題自行代理解決.
                img.onload = function() {
                    let canvas = document.createElement('canvas')
                    canvas.width = img.width
                    canvas.height = img.height
                    let ctx = canvas.getContext('2d')
                    ctx.drawImage(this, 0, 0)
                    let imgBase64Data = canvas.toDataURL('image/jpeg', 1) //這里就拿到了base64

                    wx.miniProgram.postMessage({
                        data: {
                            imgData: imgBase64Data // 剛才拿到的base64 數據
                        }
                    })

                    wx.miniProgram.navigateBack({
                        delta: 1
                    }) //注意這里.
                }
            }
        </script>
    </body>

</html>

小程序端代碼:

// wxml
<
web - view src = "http://www.chuchur.com/save-image"
bindmessage = "getMessage" > < /web-view>

// js
Page({

    getMessage(e) {

        let img = e.detail.data[0].imgData

        wx.getFileSystemManager().writeFile({
            filePath: wx.env.USER_DATA_PATH + '/qrcode.jpeg', //這里先把文件寫到臨時目錄里.
            data: img.slice(22), //注意這里
            encoding: 'base64',
            success: res => {
                console.log('success')
                wx.saveImageToPhotosAlbum({
                    filePath: wx.env.USER_DATA_PATH + '/qrcode.jpeg', //這是把臨時文件 保存到 相冊, 收工
                    success: res => {
                        wx.showToast({
                            title: '保存成功!'
                        })
                    },
                    fail: error => {
                        console.log(error)
                    }
                })
            },
            fail: error => {
                console.log(error)
            }
        })
    }
})

其它相關

保存遠程圖片

  wx.showLoading({
      title: "正在下載圖片... ",
      mask: !1
  })

  wx.downloadFile({
  url: '填寫一個遠程的圖片鏈接',
  success: function(t) {

      wx.showLoading({
          title: "正在保存圖片",
          mask: !1
      })
      wx.saveImageToPhotosAlbum({
          filePath: t.tempFilePath,
          success: function() {
              wx.showModal({
                  title: "自定義提示信息",
                  content: "保存成功",
                  showCancel: !1
              });
          },
          fail: function(t) {
              wx.showModal({
                  title: "圖片保存失敗",
                  content: t.errMsg,
                  showCancel: !1
              });
          },
          complete: function(t) {
              wx.hideLoading();
          }
      });

  },
  fail: function(t) {
      wx.showModal({
          title: "圖片下載失敗",
          content: t.errMsg,
          showCancel: !1
      });
  },
  complete: function(t) {
      wx.hideLoading();
  }
  }))

以上是“微信小程序頁面中如何實現保存圖片”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

莱州市| 揭东县| 囊谦县| 潼关县| 福安市| 唐河县| 遂昌县| 通辽市| 顺义区| 福海县| 施甸县| 吴川市| 承德市| 黔江区| 临猗县| 常德市| 河北区| 嵊泗县| 榕江县| 海林市| 若尔盖县| 调兵山市| 正安县| 永德县| 富民县| 天祝| 平湖市| 翁源县| 合阳县| 平利县| 青海省| 乌恰县| 玉溪市| 德阳市| 泌阳县| 乌海市| 砚山县| 宜春市| 兰坪| 林州市| 额尔古纳市|