微信小程序之生成朋友圈海報

一芥炭、開發(fā)需求

最近項目中遇到一個需求恃慧,就是實現(xiàn)一個可以分享到朋友圖的海報痢士,朋友圈用戶掃碼進(jìn)入小程序。

二善延、開發(fā)思路

  1. 這個需求城侧,在微信小程序很常見嫌佑,我這邊主要是參考金數(shù)據(jù),以及開發(fā)者頭條的小程序分享海報進(jìn)行界面和功能設(shè)計
  2. 界面元素有:
    1. 微信頭像
    2. 海報背景
    3. 小程序二維碼
    4. 授權(quán)
    5. 保存
  3. 小程序推出來好幾年了揩魂,生成朋友圈海報的功能也不復(fù)雜火脉,應(yīng)該有很多輪子,可以借用一下棋枕。

三妒峦、參考

功能上,主要參考了金數(shù)據(jù)和開發(fā)者頭條的小程序

技術(shù)上:小程序海報生成組件肯骇,參考了以下代碼

  1. https://github.com/WGinit/mini-poster
  2. https://developers.weixin.qq.com/community/develop/article/doc/000e222d9bcc305c5739c718d56813
  3. https://github.com/kuckboy1994/mp_canvas_drawer.git
  4. https://github.com/jasondu/wxa-plugin-canvas.git
  5. https://github.com/yicm/WxPoster.git

四笛丙、技術(shù)難點及關(guān)鍵代碼

  1. 授權(quán)獲取微信頭像,并下載到本地

    1. 獲取用戶的頭像

    2. 下載骨稿,注意需要增加 https://thirdwx.qlogo.cn到小程序控制臺頁面中uploadFile合法域名的的下載domian list中坦冠,否則手機(jī)端會報錯:

      url not in domain list

      在微信控制臺配置好以后哥桥,還需要等一段時間拟糕,才能生效。我是等了1個小時侠草。

    async getUserInfo() {

    ? console.log('enter getUserInfo')

    ? let that = this;

    ? return new Promise((resolve, reject) => {

    ? wx.getUserInfo({

    ? success(res) {

    ? // console.log("獲取用戶信息成功", res)

    ? app.globalData.wxUserInfo = res.userInfo;

    ? that.data.isUserInfoAuth = true

    ? resolve(res)

    ? },

    ? fail(err) {

    ? wx.getSetting({

    ? success(res) {

    ? //已授權(quán)

    ? if (res.authSetting['scope.userInfo']) {

    ? wx.showToast({

    ? title: '獲取用戶權(quán)限失敗梦抢,請重試',

    ? icon: 'none',

    ? duration: 4000

    ? })

    ? }else{

    ? wx.showToast({

    ? title: '獲取用戶權(quán)限失敗奥吩,請授權(quán)',

    ? icon: 'none',

    ? duration: 4000

    ? })

    ? that.setData({

    ? modalName: 'bottomModalUserInfo',

    ? isUserInfoAuth:false

    ? })

    ? }

    ? },fail : error=>{

    ? wx.showToast({

    ? title: '獲取用戶權(quán)限失敗霞赫,請重試',

    ? icon: 'none',

    ? duration: 4000

    ? })

    ? }

    ? })

    ? reject(err)

    ? }

    ? })

    ? })

    },

  2. 授權(quán)將海報保存到本地

    ? eventSave() {

    ? let that = this;

    ? if(this.data.shareImage===''){

    ? wx.showToast({

    ? title: '請先生成海報',

    ? icon:'none',

    ? duration: 4000

    ? })

    ? return

    ? }

    ? wx.saveImageToPhotosAlbum({

    ? filePath: this.data.shareImage,

    ? success(res) {

    ? console.log(res,that.data.shareImage)

    ? wx.showToast({

    ? title: '保存圖片成功',

    ? icon: 'success',

    ? duration: 2000

    ? })

    ? wx.previewImage({

    ? urls: [this.data.shareImage,...this.data.tempFileList],

    ? })

    ? },

    ? fail: err => {

    ? console.log(err)

    ? wx.showToast({

    ? title: err.errMsg,

    ? })

    ? //顯示授權(quán)圖片頁面

    ? that.setData({

    ? modalName:'bottomModalSetting'

    ? })

    ? }

    ? })

    },

  3. 小程序二維碼的生成以及下載

    1. 二維碼的生成以及下載端衰,參考https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.getUnlimited.html
    2. 因為生成二維碼會用到token旅东,token是放到服務(wù)器端統(tǒng)一保存的,所以建議后端生成二維碼后腾节,供前端下載使用荤牍,不過我在寫前端的時候康吵,還是基于前端生成二維碼,做了個demo

    async getQrCode() {

    ? wx.showLoading({

    ? title: '獲取二維碼',

    ? })

    ? let that = this;

    ? if (this.data.accessToken === '') {

    ? await this.getAccessToken()

    ? }

    ? console.log('accessToken',this.data.accessToken )

    ? return new Promise((resolve, reject) => {

    ? wx.request({

    ? url: 'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=' + this.data.accessToken,

    ? method: 'POST',

    ? data: {

    ? scene: 1012,

    ? "width": 430,

    ? // 是否為Png同辣,默認(rèn)jpeg

    ? is_hyaline: true,

    ? // 是否自動取色

    ? auto_color: true,

    ? // page: 'pages/credit/survey/survey',

    ? page: 'pages/index/index'

    ? },

    ? responseType: 'arraybuffer',

    ? success:function(res){

    ?

    ? const fs = wx.getFileSystemManager(); //獲取全局唯一的文件管理器

    ? console.log(wx.env.USER_DATA_PATH+"/1.jpeg")

    ? fs.writeFile({ // 寫文件

    ? filePath: that.data.qrCodeTmpPath, // wx.env.USER_DATA_PATH 指定臨時文件存入的路徑邑闺,后面字符串自定義

    ? data: res.data,

    ? encoding: "binary", //二進(jìn)制流文件必須是 binary

    ? success (res){

    ? that.data.qrCodeLocalPath = that.data.qrCodeTmpPath;

    ? resolve(res)

    ? },

    ? fail(err){

    ? console.log(err)

    ? reject(err)

    ? }

    ? });

    ? },

    ? fail:function(err){

    ? console.log(err)

    ? reject(err)

    ? }

    ? })

    ? })

    ?

    }

  4. 海報背景圖的的存儲

    可以放本地,也可以放在服務(wù)器上面伴挚,不過基于小程序的項目大小限制灾炭,所以建議放到服務(wù)器上蜈出。可以使用騰訊的云開發(fā)模式偷厦,把圖片放到云存儲上只泼。

  5. 生成海報

    大部分github的demo都是基于canvas來生成的卵洗。因為元素不太復(fù)雜,可以直接硬編碼十绑,不過也有一些是進(jìn)行了json配置化。我覺得主要難點是扳躬,坐標(biāo)不太好確定勋功。

  6. 權(quán)限控制

    1. 需要申請讀取用戶信息狂鞋,以及相冊信息

    <button class="bg-green" open-type='getUserInfo' bindgetuserinfo="bindGetUserInfo">微信授權(quán)用戶信息</button>

    <button type='primary' class='openSetting' open-type="openSetting"
    bindopensetting='handleSetting'>微信授權(quán)寫入本地相冊</button>

五骚揍、代碼

參考:

https://github.com/ghl116/wxposterdemo.git

poster2的相關(guān)頁面

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末信不,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子硫戈,更是在濱河造成了極大的恐慌,老刑警劉巖下硕,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丁逝,死亡現(xiàn)場離奇詭異,居然都是意外死亡梭姓,警方通過查閱死者的電腦和手機(jī)霜幼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來誉尖,“玉大人罪既,你說我怎么就攤上這事≌∷。” “怎么了琢感?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵没咙,是天一觀的道長猩谊。 經(jīng)常有香客問我,道長祭刚,這世上最難降的妖魔是什么牌捷? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任墙牌,我火速辦了婚禮,結(jié)果婚禮上暗甥,老公的妹妹穿的比我還像新娘喜滨。我一直安慰自己,他們只是感情好撤防,可當(dāng)我...
    茶點故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布虽风。 她就那樣靜靜地躺著,像睡著了一般寄月。 火紅的嫁衣襯著肌膚如雪辜膝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天漾肮,我揣著相機(jī)與錄音厂抖,去河邊找鬼。 笑死克懊,一個胖子當(dāng)著我的面吹牛忱辅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播谭溉,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼墙懂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了扮念?” 一聲冷哼從身側(cè)響起损搬,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎柜与,沒想到半個月后场躯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡旅挤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了伞鲫。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片粘茄。...
    茶點故事閱讀 39,745評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖秕脓,靈堂內(nèi)的尸體忽然破棺而出柒瓣,到底是詐尸還是另有隱情,我是刑警寧澤吠架,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布芙贫,位于F島的核電站,受9級特大地震影響傍药,放射性物質(zhì)發(fā)生泄漏磺平。R本人自食惡果不足惜魂仍,卻給世界環(huán)境...
    茶點故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拣挪。 院中可真熱鬧擦酌,春花似錦、人聲如沸菠劝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赶诊。三九已至笼平,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間舔痪,已是汗流浹背寓调。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留辙喂,地道東北人捶牢。 一個月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像巍耗,于是被迫代替她去往敵國和親秋麸。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,652評論 2 354

推薦閱讀更多精彩內(nèi)容