小程序如何生成海報分享朋友圈

2020-09-05 Echa攻城獅

作者:小白

轉發連結:https://segmentfault.com/a/1190000019083548

前言

項目需求寫完有一段時間了,但是還是想回過來總結一下,一是對項目的回顧優化等,二是對坑的地方做個記錄,避免以後遇到類似的問題。

需求

利用微信強大的社交能力通過小程序達到裂變的目的,拉取新用戶。
生成的海報如下

需求分析

1、利用小程序官方提供的api可以直接分享轉發到微信群打開小程序
2、利用小程序生成海報保存圖片到相冊分享到朋友圈,用戶長按識別二維碼關注公眾號或者打開小程序來達到裂變的目的

實現方案

一、分析如何實現

相信大家應該都會有類似的迷惑,就是如何按照產品設計的那樣繪製成海報,其實當時我也是不知道如何下手,認真想了下得通過canvas繪製成圖片,這樣用戶保存這個圖片到相冊,就可以分享到朋友圈了。但是要繪製的圖片上面不僅有文字還有數字、圖片、二維碼等且都是活的,這個要怎麼動態生成呢。認真想了下,需要一點一點的將文字和數字,背景圖繪製到畫布上去,這樣通過api最終合成一個圖片導出到手機相冊中。

二、需要解決的問題

1、二維碼的動態獲取和繪製(包括如何生成小程序二維碼、公眾號二維碼、打開網頁二維碼)
2、背景圖如何繪製,獲取圖片信息
3、將繪製完成的圖片保存到本地相冊
4、處理用戶是否取消授權保存到相冊

三、實現步驟

這裡我具體寫下圍繞上面所提出的問題,描述大概實現的過程

①首先創建canvas畫布,我把畫布定位設成負的,是為了不讓它顯示在頁面上,是因為我嘗試把canvas通過判斷條件動態的顯示和隱藏,在繪製的時候會出現問題,所以採用了這種方法,這裡還有一定要設置畫布的大小。

<canvas canvas-id=&34; style=&34;></canvas>

②創建好畫布之後,先繪製背景圖,因為背景圖我是放在本地,所以獲取 <canvas> 組件 canvas-id 屬性,通過createCanvasContext創建canvas的繪圖上下文 CanvasContext 對象。使用drawImage繪製圖像到畫布,第一個參數是圖片的本地地址,後面兩個參數是圖像相對畫布左上角位置的x軸和y軸,最後兩個參數是設置圖像的寬高。

const ctx = wx.createCanvasContext(&39;)ctx.drawImage(&39;, 0, 0, 690, 1085)

③創建好背景圖後,在背景圖上繪製頭像,文字和數字。通過getImageInfo獲取頭像的信息,這裡需要注意下在獲取的網絡圖片要先配置download域名才能生效,具體在小程序後臺設置裡配置。

獲取頭像地址,首先量取頭像在畫布中的大小,和x軸Y軸的坐標,這裡的result[0]是我用promise封裝返回的一個圖片地址

let headImg = new Promise(function (resolve) {        wx.getImageInfo({          src: `${app.globalData.baseUrl2}${that.data.currentChildren.headImg}`,          success: function (res) {            resolve(res.path)          },          fail: function (err) {            console.log(err)            wx.showToast({              title: &39;,              icon: &39;            })          }        })      })      let avatarurl_width = 60, //繪製的頭像寬度    avatarurl_heigth = 60, //繪製的頭像高度    avatarurl_x = 28, //繪製的頭像在畫布上的位置    avatarurl_y = 36; //繪製的頭像在畫布上的位置        ctx.save(); // 先保存狀態 已便於畫完圓再用    ctx.beginPath(); //開始繪製    //先畫個圓   前兩個參數確定了圓心 (x,y) 坐標  第三個參數是圓的半徑  四參數是繪圖方向  默認是false,即順時針    ctx.arc(avatarurl_width / 2 + avatarurl_x, avatarurl_heigth / 2 + avatarurl_y, avatarurl_width / 2, 0, Math.PI * 2, false);    ctx.clip(); //畫了圓 再剪切  原始畫布中剪切任意形狀和尺寸。一旦剪切了某個區域,則所有之後的繪圖都會被限制在被剪切的區域內    ctx.drawImage(result[0], avatarurl_x, avatarurl_y, avatarurl_width, avatarurl_heigth); // 推進去圖片    

這裡舉個例子說下如何繪製文字,比如我要繪製如下這個「字」,需要動態獲取前面字數的總寬度,這樣才能設置「字」的x軸坐標,這裡我本來是想通過measureText來測量字體的寬度,但是在iOS端第一次獲取的寬度值不對,關於這個問題,我還在微信開發者社區提了bug,所以我想用另一個方法來實現,就是先獲取正常情況下一個字的寬度值,然後乘以總字數就獲得了總寬度,親試是可以的。

let allReading = 97 / 6 / app.globalData.ratio * wordNumber.toString().length + 325;ctx.font = &39;;ctx.setFillStyle(&ffffff&39;字&39;小程序碼的本地地址&39;myCanvas&39;繪製成功&39;繪製失敗&34;scope.writePhotosAlbum&39;圖片保存成功,快去分享到朋友圈吧~&39;none&39;保存失敗&39;none&39;scope.writePhotosAlbum&39;scope.writePhotosAlbum&39;圖片保存成功,快去分享到朋友圈吧~&39;none&39;保存失敗&39;none&39;請設置允許訪問相冊&39;請設置允許訪問相冊&39;none&39;圖片保存成功,快去分享到朋友圈吧~&39;none&39;保存失敗&39;none'                })              }            })          }        },        fail(err) {          console.log(err)        }      })    }

總結

至此所有的步驟都已實現,在繪製的時候會遇到一些異步請求後臺返回的數據,所以我用promise和async和await進行了封裝,確保導出的圖片信息是完整的。在繪製的過程確實遇到一些坑的地方。比如初開始導出的圖片比例大小不對,還有用measureText測量文字寬度不對,多次繪製(可能受網絡原因)有時導出的圖片上的文字顏色會有誤差等。如果你也遇到一些比較坑的地方可以一起探討下做個記錄

- END -

作者:小白

轉發連結:https://segmentfault.com/a/1190000019083548

相關焦點

  • 為什麼我的微信小程序生成的海報沒有背景也不能生成圖片
    開篇前兩個月,微信小程序上線了分享到朋友圈的功能,早在之前,人們一般的做法是通過畫布生成圖片,然後將帶有二維碼的圖片分享到朋友圈,達到將微信小程序分享到朋友圈的目的。當然了,即便微信小程序已經可以分享到朋友圈了,這種海報功能還是很好的。在實際生成海報的過程中,有很多人都可能會遇到,明明代碼寫的對,可為什麼我的小程序生成的海報沒有背景,沒有圖片呢?
  • 微信小程序如何分享到朋友圈?
    近期微信官方文檔公布,微信小程序分享到朋友圈功能也在部分埠開放。期待已久的微信小程序分享到朋友圈功能已有部分用戶體驗到。 以前小程序可以直接分享給某一個好友,但是如果想要將小程序分享到朋友圈,就只能通過生成分享圖片二維碼的形式進行生成。然後分享到朋友圈之後,朋友圈的好友可以通過識別二維碼進入小程序查看。
  • 小程序分享朋友圈,我們幫商家快人一步
    從前,我們要識別小程序碼,進入小程序。而現在,少了一步,我們直接在朋友圈點進去,就可以進入小程序。我們都知道,想要讓人進屋,就不要設置門檻!從此,不需要再長按圖片,不需要等待,不需要消耗新客戶的耐心,這將會大大增加消費者進入商城的概率。誰第一個增加分享朋友圈功能,誰就能搶佔先機。
  • 小程序可分享到微信朋友圈
    朋友圈巨大的流量池該如何收割?我們不妨繼續往下看看:朋友圈開放,對電商來說意味什麼?騰訊Q1財報顯示,微信及WeChat合併月活躍帳戶數達12.025億,同比增長8.2%,帶動小程序用戶迅速增長,日活躍帳戶數超過4億。
  • 科普:微信小程序生成二維碼的幾種方式
    微信已經成為我們日常生活中離不開的工具,而基於微信生態,二維碼已經成了「物、人、服務」的連接器,尤其是隨著小程序和社交電商的火爆,通過小程序生成二維碼分享,商家能夠獲得流量裂變和巨大的經濟價值。這裡我以「超級雲名片」為例給大家詳細說明下小程序中生成二維碼流程。成功生成一個超級雲名片小程序後,打開小程序中你想分享的商品詳情頁,再點擊商品圖片右下方的「分享」按鈕,選擇「生成分享圖片」,就可以看到小程序生成二維碼圖,如下圖所示。
  • 微信外賣小程序如何開通?
    微信點餐小程序雖然支持外賣功能,但並非外賣平臺,而是微信開發者基於微信為商家提供的一種軟體,所以自然不存在外賣平臺那種高昂的佣金。如何創建小程序?微信搜索「掃碼點餐自助開通」,客服將協助您創建小程序、上傳商品、生成二維碼等設定顧客如何進店下單?
  • 教你如何用有贊一鍵開啟,實現小程序分享到朋友圈
    微信官方發布「小程序分享到朋友圈」的測試版公告不到3天,有贊在發布的新版小程序中已正式接入該功能,有贊所服務的小程序商家,將第一時間享受到來自朋友圈的流量紅利。根據有贊產品團隊提供的演示截圖,該功能的使用流程為:用戶在商家小程序右上角點擊分享按鈕——選擇「分享到朋友圈」;朋友圈好友點擊分享連結進入小程序頁面——點擊「前往小程序」訪問分享頁面。
  • 小程序將支持分享到朋友圈了?
    朋友圈小程序僅適用於內容型頁面分享據悉,微信小程序分享至朋友圈的路徑如下:第一,用戶打開任意一個小程序頁面,可以選擇「發送給朋友」或「分享到朋友圈」;第二,當用戶選擇「分享到朋友圈」後,可以看到分享到朋友圈的預覽效果;第三,用戶在分享小程序到朋友圈的過程中,還可以編輯文字,設置
  • 小程序支持分享朋友圈
    01小程序支持朋友圈分享1、部分帳號受邀內測 但最近小程序的部分創業者收到了內測邀請,只要將相關的代碼文檔加入到自己的小程序,就能實現到轉發朋友圈的功能。微信如果不開放小程序的朋友圈,那麼小程序將失去最大的流量入口。
  • 小程序支持分享「朋友圈」背後有哪些商機?
    朋友圈巨大的流量池該如何收割?我們不妨繼續往下看看:朋友圈開放,對電商來說意味什麼?朋友圈是微信內重要的流量入口,也是佔用用戶注意力最多的幾大模塊之一。對商家來說,也是引流的重要陣地。此前,小程序無法分享到朋友圈,商家只能發布帶「小程序碼」的圖片。用戶需要經歷在小程序內生成圖片-保存到相冊-退出小程序-打開朋友圈-發布朋友圈這樣繁瑣的路徑。
  • 「小程序分享到朋友圈」如何實現?手把手教你用有贊一鍵開啟
    微信官方發布「小程序分享到朋友圈」的測試版公告不到3天,有贊在發布的新版小程序中已正式接入該功能,有贊所服務的小程序商家,將第一時間享受到來自朋友圈的流量紅利。  根據有贊產品團隊提供的演示截圖,該功能的使用流程為:用戶在商家小程序右上角點擊分享按鈕——選擇「分享到朋友圈」;朋友圈好友點擊分享連結進入小程序頁面——點擊「前往小程序」訪問分享頁面。
  • 小程序一鍵分享到朋友圈!
    7月7日是微信小程序的一個大日子!微信小程序有什麼重磅消息讓網友振臂高呼紛紛發圈紀念千呼萬喚小程序可分享到朋友圈了。 這意味著小程序的流量來源再次被拓寬!毫無疑問,小程序也將迎來更大一輪爆發。 一直以來,小程序分享至朋友圈功能都是是商家最翹首以盼的功能之一。 「小程序分享到朋友圈」能給商家帶來什麼?
  • 微信一鍵生成擺攤海報,讓你在朋友圈裡做最靚的擺攤佬,太有趣了
    地攤經濟似乎一夜之間就火爆了,朋友圈瞬間成為了各種的攤位,有老師轉行做早戀勸分專家,也有像小雷這樣網際網路轉行做手機貼膜的,朋友圈裡似乎看到了各式各樣的地攤經濟。不過有人早就嗅到了這裡面的可玩性,通過微信小程序來生成專屬的擺攤海報,比如在一輛三輪車上或者自行車上。先來說說如何製作三輪車擺攤海報,點擊小雷為大家準備的生成器,在文字那一欄輸入自己想要的內容,最後點擊確定即可生成,長按圖片就會彈出保存的選項。
  • 微信小程序分享到朋友圈方法與技巧
    來源 | https://www.cnblogs.com/MohunBlogs/archive/2018/05/23/9079942.html小程序提供onShareAppMessage 函數,此函數隻支持分享給我微信朋友。小程序如何分享到朋友圈呢?
  • 微信小程序canvas繪製海報並保存本地相冊
    在做微信小程序電商項目中,想要分享一款商品,使用最多並且最簡便的方法就是使用小程序自帶的分享api進行分享,但是分享出去的頁面比較難看;另一種方法就是自己使用小程序canvas繪製分享的海報,這個海報可以保存在相冊裡,而且可以按照自己的需求效果進行頁面繪製。
  • 小程序分享到朋友圈功能灰度測試!5 個小程序開發者這麼說
    小程序的找回將變得更加容易。有用戶發現,微信小程序有了令人驚喜的新變化。小程序可分享到朋友圈,這個三年前就被諸多開發者期待的功能,現在終於上線了。知曉程序對新能力做了了解,據悉,小程序將灰度測試多項用戶期待已久的新功能,小程序可分享到朋友圈只是這其中的第一步。
  • 微信公眾號如何生成專屬海報
    公眾號開發沒有直接生成海報的接口,公眾號提供生成帶參數的二維碼、獲取用戶基本信息(UnionID機制)接口,根據這兩個接口開發者自行編程組合成專屬海報。實現專屬海報分享轉發增長公眾號用戶,海報通、助力寶、海報二維碼等功能。
  • 微信小程序可以分享朋友圈了?
    而在最近,有消息傳來:微信小程序頁面分享朋友圈功能,開始灰測了。不少小程序開發者都激動不已。 目前,小程序分享朋友圈這一功能還有兩個細節需要我們注意: 1. 安卓在前,IOS還需等待 目前,小程序分享朋友圈這一功能會現在安卓版本上進行更新,IOS版本的更新靠後,具體的發布時間還沒有確定下來。 2.
  • 木魚小鋪已接入「小程序分享到朋友圈」功能
    近日,微信官方發布「小程序分享到朋友圈」測試版公告,木魚小鋪已第一時間接入【小程序分享朋友圈】能力,木魚小鋪所服務的商家們只需重新發布小程序,就可以使用該功能,即可坐享來自朋友圈的社交紅利。 一、重新發布小程序流程 登錄木魚小鋪管理後臺,依次點擊店鋪-一鍵發布-立即授權-生成小程序-提交審核,審核通過之後,就可以使用該功能。
  • 小程序如何高效裂變營銷?
    編輯導語:小程序的出現給我們帶來了不一樣的用戶體驗,甚至代替了一些APP,在小程序上就能完成購物環節;那商家是怎麼通過小程序進行用戶的增長和營銷推廣的;本文作者詳細分析了小程序是如何實現高效裂變營銷的。