摘要:注意如果用戶一開始沒有微信授權,生成海報時又必須要用戶頭像不能使用默認的話,那就只能老老實實走之前的流程了。組件名稱終端類型微信版本觸發方法關于的調用方法相冊權限需要你提供保存相冊權限獲取相冊權限成功,給出再次點擊圖片保存到相冊的提示。
海報生成示例
海報生成速度緩慢問題的優化
微信頭像在app.js中預先加載緩存
多圖片異步加載
流程中斷處理
二次授權失敗的處理
請求或者下載圖片失敗處理
保存圖片可被壓縮
### [代碼片段]Canvas生成海報實戰demo
demo的微信路徑:https://developers.weixin.qq....
demo的ID:Q74OU3m57c9x
如果你裝了IDE工具,可以直接訪問上面的demo路徑
通過代碼片段將demo的ID輸入進去也可添加:
海報生成速度緩慢問題的優化原因分析:
主要的時間消耗在于getImageInfo網絡請求獲取頭像和下載圖片獲得臨時地址的過程,可以看到海報中有3張圖片(微信頭像、主圖、動態二維碼(對應不同新聞的ID))需要下載,接下來主要就是對這3張圖的優化
//app.js //可以在app.js中使用小程序默認的全局變量,將頭像在加載的時候預先緩存 App({ onLaunch: function () { // 獲取用戶信息 wx.getSetting({ success: res => { if (res.authSetting["scope.userInfo"]) { // 已經授權,可以直接調用 getUserInfo 獲取頭像昵稱,不會彈框 wx.getUserInfo({ success: res => { this.globalData.userInfo = res.userInfo; //從返回值中獲取微信頭像地址 let WxHeader = res.userInfo.avatarUrl; wx.getImageInfo({ src: WxHeader,//下載微信頭像獲得臨時地址 success: res => { //將頭像緩存在全局變量里 this.globalData.avatarUrlTempPath = res.path; }, fail: res => { //失敗回調 } }); } }) } } }) }, globalData: { userInfo: null, //如果用戶沒有授權,無法在加載小程序的時候獲取頭像,就使用默認頭像 avatarUrlTempPath: "./images/defaultHeader.jpg" } })
大致思路是: 加載App.js的時候
==> getSetting(判斷是否授權)
==> getUserInfo(獲取頭像)
==> getImageInfo(生成臨時地址)
將需要的網絡請求在加載小程序的時候就異步完成,提前將臨時地址緩存在全局變量globalData中,這樣當用戶進入新聞頁面,點擊生成海報的時候就不需要在請求微信頭像,縮短了不少時間。
注意: 如果用戶一開始沒有微信授權,生成海報時又必須要用戶頭像不能使用默認的話,那就只能老老實實走之前的流程了。
let num = 0; //下載圖片計數器,假設一共三張圖片 //下載圖片1 wx.getImageInfo({ src: image_1, success: function (res) { //判斷是否是最后一張圖 if (num >= 2) { console.log("圖片全部下載完畢,可以繪制海報") } else { //如果不是最后一張圖則+1,繼續 num++; } }, fail: function (res) { //失敗回調 } }); //下載圖片2 wx.getImageInfo({ src: image_2, success: function (res) { //判斷是否是最后一張圖 if (num >= 2) { console.log("圖片全部下載完畢,可以繪制海報") } else { //如果不是最后一張圖則+1,繼續 num++; } } }); ......
這里智庫君一開始是使用promise的同步辦法,但是發現3張圖片阻塞嚴重,如果一張圖片下載過慢,就會影響整個海報生成時間,所以可以改為添加計數器判斷的異步方法。
當海報生成需要多張圖片的時候,完全可以異步的方式加載他們,通過計數器判斷是否是最后一張。
從圖中可以看出,整個海報生成過程有二次授權:用戶信息授權獲取頭像和保存相冊授權,非常可能因為用戶的誤點或者拒絕而導致流程中斷。
主要分為二種情況:
需要的圖片沒有拿到,我們可以采取使用默認圖片的方式替代。
保存相冊授權被拒絕,我們可以提示用戶“截圖保存”,由于當前版本6.7.2+的wx.openSetting()被限制(無法直接被調用),如果必須要相冊權限,我們可以通過showModal觸發。
API/組件名稱 | 終端類型 | 微信版本 | 觸發方法 |
---|---|---|---|
openSetting | 6.7.2 | 2.3.0 | showModal |
// 關于 openSetting 的調用方法 wx.showModal({ title: "相冊權限", content: "需要你提供保存相冊權限", success: function (res) { if (res.confirm) { wx.openSetting({ success(settingdata) { console.log(settingdata) if (settingdata.authSetting["scope.writePhotosAlbum"]) { console.log("獲取 相冊 權限成功,給出再次點擊圖片保存到相冊的提示。"); } else { console.log("獲取 相冊 權限失敗,給出不給權限就無法正常使用的提示") } } }) } } }) //獲取相冊權限的流程處理 wx.saveImageToPhotosAlbum({ filePath: res.tempFilePath, //canvasToTempFilePath API生成的臨時地址 success: function (data) { console.log("提示圖片保存成功"); }, fail: function (err) { console.log(err); if (err.errMsg === "saveImageToPhotosAlbum:fail auth deny") { console.log("當初用戶拒絕,再次發起授權") //調用上面說到的方法 wx.openSetting } else { console.log("提示:請截屏保存分享"); } }, complete(res) { console.log(res); } })保存圖片可被壓縮
小程序官方提供了一個API可以設置用戶保存圖片的質量,僅針對JPG。
屬性 | 默認值 | 說明 | 最低版本 |
---|---|---|---|
quality | 1.0 | 圖片的質量,取值范圍為 (0, 1] | 1.7.0 |
wx.canvasToTempFilePath({ fileType: "jpg", canvasId: "canvasId", quality:0.8, //設置JPG保存質量 80% success: res => { }, fail:res => { } }, this)
官方文檔地址:
https://developers.weixin.qq.com/miniprogram/dev/api/wx.canvasToTempFilePath.html?search-key=canvasToTempFilePath
如果有什么疑問或者糾錯可以在下面給智酷君留言。
如果智酷君的分享能夠幫助到你,或者想持續獲得最新的全棧攻略
可以在segmentfault關注我,或在VX搜索“ Geek_Club ”或者“ 智酷方程式 ”
掃描關注公眾號
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/104302.html
摘要:組件模板與組件數據結合后生成的節點樹,將被插入到組件的引用位置上。事件用于子組件向父組件傳遞數據,可以傳遞任意數據。官方文檔往期回顧填坑手冊小程序生成海報一拆彈時刻小程序生成海報二 showImg(https://user-gold-cdn.xitu.io/2019/6/19/16b6e94bcde767a1?w=1069&h=652&f=jpeg&s=120912); 小程序目錄結構...
摘要:往期回顧打怪升級小程序評論回復和發貼功能實戰二填坑手冊小程序生成海報一拆彈時刻小程序生成海報二填坑手冊小程序目錄結構和組件使用心得 showImg(https://segmentfault.com/img/remote/1460000019733090?w=818&h=516); 在學習成長的過程中,常常會遇到一些自己從未接觸的事物,這就好比是打怪升級,每次打倒一只怪,都會獲得經驗,讓...
摘要:發帖的功能只要理清思路,其實并不復雜,利用機器做內容審查是關鍵,直接關系到小程序的整體安全。內容檢查重點由于內容安全對于小程序運營至關重要,稍有不慎就容易導致小程序被封,所以在這塊的校驗除了常規人工檢查外,我們還可以用到微信的內容安全。 showImg(https://segmentfault.com/img/remote/1460000019955210?w=658&h=440); ...
摘要:解析進到首頁其實關鍵字在本地就隨機取完了,在首頁中的方法中就通過緩存了要畫的元素,比如關鍵字這里是圖片關鍵字解析語也是圖片畢竟微信小程序的不支持字體等等。 一、Canvas應用的背景(個人理解)及基礎語法 背景 從2012年開始,微信那個時候用戶的積累的量已經非常大了,推出公眾號,當然大屏智能手機在那個時候也流行,傳統的大眾媒體逐步消亡,像微信公眾號這樣的新媒體盛行。企業的廣告投入開始...
摘要:項目需求寫完有一段時間了,但是還是想回過來總結一下,一是對項目的回顧優化等,二是對坑的地方做個記錄,避免以后遇到類似的問題。需求利用微信強大的社交能力通過小程序達到裂變的目的,拉取新用戶。摘要: 小程序開發必備技能啊... 原文:小程序如何生成海報分享朋友圈 作者:小白 Fundebug經授權轉載,版權歸原作者所有。 項目需求寫完有一段時間了,但是還是想回過來總結一下,一是對項目的回顧優...
閱讀 1738·2023-04-25 19:37
閱讀 1308·2021-11-16 11:45
閱讀 2807·2021-10-18 13:30
閱讀 2767·2021-09-29 09:34
閱讀 1630·2019-08-30 15:55
閱讀 3116·2019-08-30 11:10
閱讀 1834·2019-08-29 16:52
閱讀 999·2019-08-29 13:18