日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

微信小程序第四篇:生成图片并保存到手机相册

發布時間:2023/12/31 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微信小程序第四篇:生成图片并保存到手机相册 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

系列文章傳送門:

微信小程序第一篇:自定義組件詳解

微信小程序第二篇:七種主流通信方法詳解

微信小程序第三篇:獲取頁面節點信息

目錄

一、封裝分享組件

二、定義用戶授權方法

三、調用流程


首先我們看一下要完成的效果:

?

這種場景還是非常常見的,點擊分享的時候我們可以轉發給好友,或者生成當前頁的海報圖片保存到手機相冊中。分享給好友這個功能可以通過? button 的 open-type 方式實現,那自動保存圖片到本地該如何實現呢,讓我們來看一看吧:

一、封裝分享組件

首先我們要封裝一個分享的組件,這樣方便在其他的頁面中復用。這樣就大大減少了代碼的冗余,

在 components 文件夾中新建一個組件,下面是完整代碼

share.wxml:

<!-- 底部自定義分享菜單欄 --> <view class="share-sheet-mask flex-column" hidden="{{!showShareSheet}}" catchtap="closeShareSheet"><view class="share-sheet"><view class="items flex-row"><view class="item flex-column"><button class="ico flex-row" open-type="share"><image class="img wx-ico" src="../../images/ico_wx.svg"></image></button><view class="desc">微信好友</view></view><view class="item flex-column"><button class="ico flex-row" catchtap="genPlayBill"><image class="img img-ico" src="../../images/ico_img.svg"></image></button><view class="desc">生成海報</view></view></view><view class="cancel-share-sheet">取消</view></view> </view>

?share.js:

Component({/*** 組件的屬性列表*/properties: {},/*** 組件的初始數據*/data: {showShareSheet: false},/*** 組件的方法列表*/methods: {openShareSheet() {this.setData({showShareSheet: true})},closeShareSheet() {this.setData({showShareSheet: false});},genPlayBill() {this.triggerEvent('genPlayBill')},} })

在點擊生成海報的時候,我們向父組件發送了一個事件來調用 genPlayBill 方法,因為這個方法顯然不應該在當前組件內定義,應該根據不同場景來定義我們只需要調用它就可以了。

share.wxss:

.flex-column {display: flex;flex-direction: column;align-items: center;justify-content: space-between; }.flex-row {display: flex;flex-direction: row;align-items: center;justify-content: space-between; }.share-sheet-mask {position: fixed;top: 0;left: 0;right: 0;bottom: 0;background: rgba(0, 0, 0, 0.60);z-index: 101;justify-content: flex-end; }.share-sheet-mask .share-sheet {padding:0 24rpx;background: #f1f1f1;border-radius: 16rpx 16rpx 0px 0px;width: 100%;box-sizing: border-box; } .share-sheet-mask .share-sheet .items {padding: 48rpx 0 31rpx 0;justify-content: space-around;border-bottom: 0.5px solid rgba(39,36,71,0.20); } .share-sheet-mask .share-sheet .items .item{text-align: center; } .share-sheet-mask .share-sheet .items .item .ico {width: 80rpx;height: 80rpx;background: #ffffff;border-radius: 50%;box-shadow: 0 0 12rpx 0 rgba(204,204,204,0.60);padding: 0;margin: 0;padding: 0; } /*去除button的默認黑邊框*/ .share-sheet-mask .share-sheet .items .item .ico::after{border: none; } .share-sheet-mask .share-sheet .items .item .ico .img {margin: auto; } .share-sheet-mask .share-sheet .items .item .ico .wx-ico {width: 52rpx;height: 40rpx; } .share-sheet-mask .share-sheet .items .item .desc {font-size: 24rpx;font-family: PingFangSC, PingFangSC-Regular;color: #6d6d6d;margin-top: 14rpx; } .share-sheet-mask .share-sheet .items .item .ico .img-ico {width: 44rpx;height: 44rpx; } .share-sheet-mask .share-sheet .cancel-share-sheet {margin: 31rpx auto 80rpx auto;font-size: 32rpx;font-family: PingFangSC, PingFangSC-Regular;color: #272447;text-align: center; }

二、定義用戶授權方法

剛剛我們封裝了頂部的分享組件,那現在就要去定義保存圖片到相冊的方法了,我們寫代碼的時候一定要考慮清楚這段代碼是否是可復用的,是否應該剝離出去。顯然保存圖片到相冊這個方法我們應該寫在 utils 目錄中,因為有很多其他的場景都可以用這個方法,那我們就封裝一個公用方法,參數就是圖片的地址,成功的回調函數和失敗的回調函數。

最復雜的就是用戶授權了,我們一起看一下代碼結構:

const saveImgToPhotos = (imgPath, succCallback, failedCallback) => {wx.getSetting ({ // 查詢所有授權success(res) {if (res.authSetting['scope.writePhotosAlbum']) { // 用戶已經授權save() // 執行保存函數}else { // 未授權wx.authorize({ scope: 'scope.writePhotosAlbum', success() { // 用戶同意授權save() // 執行保存函數},fail(err) { // 用戶拒絕授權if (err && err.errMsg.endsWith("auth deny")) { wx.showModal({title: '授權添加到相冊',content: '需要獲取您的添加相冊權限,請確認授權,否則分享功能無法正常使用',success: function (resolve) { if (resolve.confirm) { // 用戶同意設置授權wx.openSetting({success(res) {if (res && res.authSetting['scope.writePhotosAlbum']) {save() // 執行保存函數}},fail(res) { // 用戶拒絕設置授權console.log(res)failedCallback('沒有權限,保存失敗')}})} else { // 用戶拒絕設置failedCallback('沒有權限,保存失敗')}}})} else {failedCallback(err && err.errMsg || '保存失敗')}}})}},})}

通過?wx.authorize()?來申請權限的方式是比較繁瑣的。因為它的狀態比較多,大致可分為:

  • 用戶未接受或拒絕過此權限,會彈窗詢問用戶,用戶點擊同意 —— 可調用相應接口。
  • 用戶未接受或拒絕過此權限,會彈窗詢問用戶,用戶點擊拒絕 —— 打開設置頁面。
  • 如果用戶已授權 —— 可調用相應接口。
  • 用戶已拒絕授權 —— 打開設置頁面。
  • 上述情況的2/4是需要小伙伴們結合 wx.openSetting() 來幫助用戶進行二次授權的。

    搞定了用戶授權這個麻煩事后,下面就是定義我們的 save 保存函數了,這個就很簡單了:

    let save = function () {wx.saveImageToPhotosAlbum({filePath: imgPath,success() {succCallback()},fail(res){failedCallback(res)}})}

    把這段代碼添加到 saveImgToPhotos 方法中就ok了,調用?wx.saveImageToPhotosAlbum 方法,參數就是我們傳進來的圖片地址,成功的話就執行成功的回調,失敗就執行失敗的回調。

    下面是官方的文檔說明:

    ?

    三、調用流程

    下面我們就把組件,方法這些東西引入到我們的頁面中。在頁面的 json 文件中引入組件路徑。

    把組件引入頁面wxml中:

    <share-sheet id="share-sheet" catch:genPlayBill="genTimelineImage" />

    這里的方法就是點擊生成海報的時候調用的父組件的方法。

    當點擊分享的時候展示分享組件:

    openShareSheet(e) {this.selectComponent("#share-sheet").openShareSheet()},

    在這里通過選擇器可以直接調用子組件中的方法,來控制分享組件的顯示與隱藏。

    genTimelineImage(e) {wx.showLoading({title: "海報生成中",icon: "loading",mask: true,})const imgSrc = `路徑`wx.getImageInfo({src: imgSrc,}).then((res) => {wx.hideLoading()this.imgTempPath = res.paththis.saveTimelineImg()}).catch((err) => console.log(err))},saveTimelineImg: function () {saveImgToPhotos(this.imgTempPath, function(){this.selectComponent("#share-sheet").closeShareSheet()}.bind(this), function(errMsg) {this.selectComponent("#share-sheet").closeShareSheet()}.bind(this))},

    當我們點擊生成海報調用 genTimelineImage 方法的時候,通過 wx.getImageInfo 方法讀取想要保存圖片的臨時下載路徑,把他保存到外部定義的一個變量中,這樣方便我們在 utils 目錄中定義的 saveImgToPhotos 方法調用。這樣我們整個的流程就over啦!

    總結

    以上是生活随笔為你收集整理的微信小程序第四篇:生成图片并保存到手机相册的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 成人性做爰aaa片免费看不忠 | 老妇高潮潮喷到猛进猛出 | 日韩一级大片 | 撸撸在线视频 | 亚洲精品国产精品乱码不99按摩 | 色婷婷av一区二区三区四区 | 国产三级三级三级 | 国内福利视频 | 天堂а√在线中文在线鲁大师 | 欧美xxx性| 日本韩国视频 | 一本到视频 | 亚洲成人第一区 | 爱上av | www.99精品| 精品人妻一区二区三区蜜桃 | 天天干夜夜操视频 | 午夜伦理一区二区 | 法国性xxxx精品hd | 欧美大片一区 | 曰批免费视频播放免费 | 这里只有精品国产 | 欧美乱妇视频 | 一级黄色大毛片 | 亚洲国产视频一区二区三区 | youjizz日韩 | 成人区人妻精品一区二区网站 | 日本三级中文字幕在线观看 | 亚洲欧洲无码一区二区三区 | 五月丁香综合激情六月久久 | 久久国产成人 | 久久久久久久久久久久久久久久久久久久 | 视频一区二区不卡 | 久操伊人| 色哟哟视频 | 四虎国产成人精品免费一女五男 | av黄色天堂 | 免费啪 | 久久草视频在线 | 婷婷久久五月 | 国产亚洲一区二区三区四区 | 国产精品三区四区 | 亚洲精品福利在线 | 国产黄a三级三级三级看三级男男 | 精品一区亚洲 | 91人人澡人人爽 | 亚洲经典自拍 | 亚洲熟女乱色一区二区三区 | 国产一区视频免费观看 | 有码在线 | 你懂的视频在线播放 | 99无码熟妇丰满人妻啪啪 | 久久久久久久蜜桃 | 国产伦视频| 午夜日韩在线观看 | 国产精品久久久精品三级 | 97视频在线免费观看 | 欧美一级在线免费观看 | 2021天天操 | 亚洲精品中文字幕乱码三区91 | 色丁香在线 | 亚洲欧美成人综合 | 伊人久久精品视频 | 影音先锋中文字幕人妻 | 韩日精品在线观看 | 成人av地址 | 久久yy | 99精品福利视频 | 老牛影视一区二区三区 | 午夜黄色av | 成人国产精品久久 | 舐め犯し波多野结衣在线观看 | 国产二级片 | www.亚洲成人 | 中国浓毛少妇毛茸茸 | 亚洲色图清纯唯美 | 日韩第一视频 | 日韩美女毛片 | 欧美日韩一卡二卡三卡 | 黄色美女一级片 | 免费美女视频网站 | 日本韩国中文字幕 | 一级欧美视频 | 都市激情 自拍偷拍 | 日韩3p| 欧美日韩在线免费观看视频 | 一级女性全黄久久生活片免费 | 欧美肥老妇 | 亲子乱一区二区三区 | 久久三 | 私人网站| av毛片在线免费看 | 国产午夜精品久久久 | 亚洲在线观看免费视频 | 91视频网页 | 日韩毛片在线播放 | 精品伦一区二区三区 | 夜夜夜撸| 精品人妻午夜一区二区三区四区 |