成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

[拆彈時(shí)刻]小程序canvas生成海報(bào)(二)---優(yōu)化方案

LittleLiByte / 1591人閱讀

摘要:注意如果用戶一開始沒有微信授權(quán),生成海報(bào)時(shí)又必須要用戶頭像不能使用默認(rèn)的話,那就只能老老實(shí)實(shí)走之前的流程了。組件名稱終端類型微信版本觸發(fā)方法關(guān)于的調(diào)用方法相冊權(quán)限需要你提供保存相冊權(quán)限獲取相冊權(quán)限成功,給出再次點(diǎn)擊圖片保存到相冊的提示。


海報(bào)生成示例

海報(bào)生成速度緩慢問題的優(yōu)化

微信頭像在app.js中預(yù)先加載緩存

多圖片異步加載

流程中斷處理

二次授權(quán)失敗的處理

請求或者下載圖片失敗處理

保存圖片可被壓縮

### [代碼片段]Canvas生成海報(bào)實(shí)戰(zhàn)demo

demo的微信路徑:https://developers.weixin.qq....

demo的ID:Q74OU3m57c9x

如果你裝了IDE工具,可以直接訪問上面的demo路徑

通過代碼片段將demo的ID輸入進(jìn)去也可添加:

海報(bào)生成速度緩慢問題的優(yōu)化

原因分析:
主要的時(shí)間消耗在于getImageInfo網(wǎng)絡(luò)請求獲取頭像和下載圖片獲得臨時(shí)地址的過程,可以看到海報(bào)中有3張圖片(微信頭像、主圖、動態(tài)二維碼(對應(yīng)不同新聞的ID))需要下載,接下來主要就是對這3張圖的優(yōu)化

微信頭像在app.js中預(yù)先加載緩存
//app.js
//可以在app.js中使用小程序默認(rèn)的全局變量,將頭像在加載的時(shí)候預(yù)先緩存
App({
    onLaunch: function () {
        // 獲取用戶信息
        wx.getSetting({
            success: res => {
                if (res.authSetting["scope.userInfo"]) {
                    // 已經(jīng)授權(quán),可以直接調(diào)用 getUserInfo 獲取頭像昵稱,不會彈框
                    wx.getUserInfo({
                        success: res => {
                            this.globalData.userInfo = res.userInfo;
                            //從返回值中獲取微信頭像地址
                            let WxHeader = res.userInfo.avatarUrl;  
                            wx.getImageInfo({
                                src: WxHeader,//下載微信頭像獲得臨時(shí)地址
                                success: res => {
                                    //將頭像緩存在全局變量里
                                    this.globalData.avatarUrlTempPath = res.path;
                                },
                                fail: res => {
                                    //失敗回調(diào)
                                }
                            });
                        }
                    })
                }
            }
        })
    },
    globalData: {
        userInfo: null,
        //如果用戶沒有授權(quán),無法在加載小程序的時(shí)候獲取頭像,就使用默認(rèn)頭像
        avatarUrlTempPath: "./images/defaultHeader.jpg"
    }
})

大致思路是: 加載App.js的時(shí)候
==> getSetting(判斷是否授權(quán))
==> getUserInfo(獲取頭像)
==> getImageInfo(生成臨時(shí)地址)
將需要的網(wǎng)絡(luò)請求在加載小程序的時(shí)候就異步完成,提前將臨時(shí)地址緩存在全局變量globalData中,這樣當(dāng)用戶進(jìn)入新聞頁面,點(diǎn)擊生成海報(bào)的時(shí)候就不需要在請求微信頭像,縮短了不少時(shí)間。
注意: 如果用戶一開始沒有微信授權(quán),生成海報(bào)時(shí)又必須要用戶頭像不能使用默認(rèn)的話,那就只能老老實(shí)實(shí)走之前的流程了。

多圖片異步加載
let num = 0; //下載圖片計(jì)數(shù)器,假設(shè)一共三張圖片
//下載圖片1
wx.getImageInfo({
    src: image_1,
    success: function (res) {
        //判斷是否是最后一張圖
        if (num >= 2) {
            console.log("圖片全部下載完畢,可以繪制海報(bào)")
        } else {
            //如果不是最后一張圖則+1,繼續(xù)
            num++;
        }
    },
    fail: function (res) {
        //失敗回調(diào)
    }
});
//下載圖片2
wx.getImageInfo({
    src: image_2,
    success: function (res) {
        //判斷是否是最后一張圖
        if (num >= 2) {
            console.log("圖片全部下載完畢,可以繪制海報(bào)")
        } else {
            //如果不是最后一張圖則+1,繼續(xù)
            num++;
        }
    }
});
......

這里智庫君一開始是使用promise的同步辦法,但是發(fā)現(xiàn)3張圖片阻塞嚴(yán)重,如果一張圖片下載過慢,就會影響整個(gè)海報(bào)生成時(shí)間,所以可以改為添加計(jì)數(shù)器判斷的異步方法。
當(dāng)海報(bào)生成需要多張圖片的時(shí)候,完全可以異步的方式加載他們,通過計(jì)數(shù)器判斷是否是最后一張。

流程中斷處理

從圖中可以看出,整個(gè)海報(bào)生成過程有二次授權(quán):用戶信息授權(quán)獲取頭像保存相冊授權(quán),非常可能因?yàn)橛脩舻恼`點(diǎn)或者拒絕而導(dǎo)致流程中斷。

主要分為二種情況:

需要的圖片沒有拿到,我們可以采取使用默認(rèn)圖片的方式替代。

保存相冊授權(quán)被拒絕,我們可以提示用戶“截圖保存”,由于當(dāng)前版本6.7.2+的wx.openSetting()被限制(無法直接被調(diào)用),如果必須要相冊權(quán)限,我們可以通過showModal觸發(fā)。

API/組件名稱 終端類型 微信版本 觸發(fā)方法
openSetting 6.7.2 2.3.0 showModal
// 關(guān)于 openSetting 的調(diào)用方法
wx.showModal({
    title: "相冊權(quán)限",
    content: "需要你提供保存相冊權(quán)限",
    success: function (res) {
        if (res.confirm) {
            wx.openSetting({
                success(settingdata) {
                    console.log(settingdata)
                    if (settingdata.authSetting["scope.writePhotosAlbum"]) {
                        console.log("獲取 相冊 權(quán)限成功,給出再次點(diǎn)擊圖片保存到相冊的提示。");
                    } else {
                        console.log("獲取 相冊 權(quán)限失敗,給出不給權(quán)限就無法正常使用的提示")
                    }
                }
            })
        }
    }
})

//獲取相冊權(quán)限的流程處理
wx.saveImageToPhotosAlbum({
    filePath: res.tempFilePath,  //canvasToTempFilePath API生成的臨時(shí)地址
    success: function (data) {
        console.log("提示圖片保存成功");
    },
    fail: function (err) {
        console.log(err);
        if (err.errMsg === "saveImageToPhotosAlbum:fail auth deny") {
            console.log("當(dāng)初用戶拒絕,再次發(fā)起授權(quán)")
            //調(diào)用上面說到的方法  wx.openSetting
        } else {
            console.log("提示:請截屏保存分享");
        }
    },
    complete(res) {
        console.log(res);
    }
})

保存圖片可被壓縮

小程序官方提供了一個(gè)API可以設(shè)置用戶保存圖片的質(zhì)量,僅針對JPG。

屬性 默認(rèn)值 說明 最低版本
quality 1.0 圖片的質(zhì)量,取值范圍為 (0, 1] 1.7.0
wx.canvasToTempFilePath({
    fileType: "jpg",
    canvasId: "canvasId",
    quality:0.8,  //設(shè)置JPG保存質(zhì)量 80%
    success: res => {
    
    },
    fail:res => {
    }
}, this)

官方文檔地址:
https://developers.weixin.qq.com/miniprogram/dev/api/wx.canvasToTempFilePath.html?search-key=canvasToTempFilePath

如果有什么疑問或者糾錯(cuò)可以在下面給智酷君留言。

如果智酷君的分享能夠幫助到你,或者想持續(xù)獲得最新的全棧攻略

可以在segmentfault關(guān)注我,或在VX搜索“ Geek_Club ”或者“ 智酷方程式

掃描關(guān)注公眾號

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/104302.html

相關(guān)文章

  • [填坑手冊]程序目錄結(jié)構(gòu)和component組件使用心得

    摘要:組件模板與組件數(shù)據(jù)結(jié)合后生成的節(jié)點(diǎn)樹,將被插入到組件的引用位置上。事件用于子組件向父組件傳遞數(shù)據(jù),可以傳遞任意數(shù)據(jù)。官方文檔往期回顧填坑手冊小程序生成海報(bào)一拆彈時(shí)刻小程序生成海報(bào)二 showImg(https://user-gold-cdn.xitu.io/2019/6/19/16b6e94bcde767a1?w=1069&h=652&f=jpeg&s=120912); 小程序目錄結(jié)構(gòu)...

    myshell 評論0 收藏0
  • [打怪升級]程序評論回復(fù)和發(fā)貼功能實(shí)戰(zhàn)(一)

    摘要:往期回顧打怪升級小程序評論回復(fù)和發(fā)貼功能實(shí)戰(zhàn)二填坑手冊小程序生成海報(bào)一拆彈時(shí)刻小程序生成海報(bào)二填坑手冊小程序目錄結(jié)構(gòu)和組件使用心得 showImg(https://segmentfault.com/img/remote/1460000019733090?w=818&h=516); 在學(xué)習(xí)成長的過程中,常常會遇到一些自己從未接觸的事物,這就好比是打怪升級,每次打倒一只怪,都會獲得經(jīng)驗(yàn),讓...

    YJNldm 評論0 收藏0
  • [打怪升級]程序評論回復(fù)和發(fā)帖功能實(shí)戰(zhàn)(

    摘要:發(fā)帖的功能只要理清思路,其實(shí)并不復(fù)雜,利用機(jī)器做內(nèi)容審查是關(guān)鍵,直接關(guān)系到小程序的整體安全。內(nèi)容檢查重點(diǎn)由于內(nèi)容安全對于小程序運(yùn)營至關(guān)重要,稍有不慎就容易導(dǎo)致小程序被封,所以在這塊的校驗(yàn)除了常規(guī)人工檢查外,我們還可以用到微信的內(nèi)容安全。 showImg(https://segmentfault.com/img/remote/1460000019955210?w=658&h=440); ...

    ThinkSNS 評論0 收藏0
  • Canvas繪圖在微信程序中的應(yīng)用:生成個(gè)性化海報(bào)

    摘要:解析進(jìn)到首頁其實(shí)關(guān)鍵字在本地就隨機(jī)取完了,在首頁中的方法中就通過緩存了要畫的元素,比如關(guān)鍵字這里是圖片關(guān)鍵字解析語也是圖片畢竟微信小程序的不支持字體等等。 一、Canvas應(yīng)用的背景(個(gè)人理解)及基礎(chǔ)語法 背景 從2012年開始,微信那個(gè)時(shí)候用戶的積累的量已經(jīng)非常大了,推出公眾號,當(dāng)然大屏智能手機(jī)在那個(gè)時(shí)候也流行,傳統(tǒng)的大眾媒體逐步消亡,像微信公眾號這樣的新媒體盛行。企業(yè)的廣告投入開始...

    vpants 評論0 收藏0
  • 程序如何生成海報(bào)分享朋友圈

    摘要:項(xiàng)目需求寫完有一段時(shí)間了,但是還是想回過來總結(jié)一下,一是對項(xiàng)目的回顧優(yōu)化等,二是對坑的地方做個(gè)記錄,避免以后遇到類似的問題。需求利用微信強(qiáng)大的社交能力通過小程序達(dá)到裂變的目的,拉取新用戶。摘要: 小程序開發(fā)必備技能啊... 原文:小程序如何生成海報(bào)分享朋友圈 作者:小白 Fundebug經(jīng)授權(quán)轉(zhuǎn)載,版權(quán)歸原作者所有。 項(xiàng)目需求寫完有一段時(shí)間了,但是還是想回過來總結(jié)一下,一是對項(xiàng)目的回顧優(yōu)...

    lemon 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<