1. 程式人生 > >微信小程式之生成圖片分享朋友圈

微信小程式之生成圖片分享朋友圈

通過社交軟體分享的方式來進行營銷小程式,是一個常用的運營途徑。小程式本身支援直接將一個小程式的連結卡片分享至微信好友或微信群,然後別人就可以通過點選該卡片進入該小程式頁面。但是小程式目前不支援直接分享到微信朋友圈,而對我們來說,微信朋友圈又是一個很重要的吸引別人關注的入口,所以,得想辦法把這個資源利用起來。

可能有的人已經知道,微信小程式支援通過掃描/長按識別二維碼或小程式碼圖片的方式進入一個小程式首頁或小程式中某個特定頁面(如何生成這類常規二維碼、小程式碼,可參考《微信小程式之生成自定義引數小程式二維碼》這篇文章),我們可以將二維碼或小程式碼分享到朋友圈去。

不過,這種二維碼看起來比較單調,不太感人!

為了提升吸引力,我們可以把這種用於分享出去的二維碼圖片做的儘量美觀、有情景感一些,比如像騰訊出品的小程式《長城你造不造》裡生成的這種分享圖片:

這種配有圖文的圖片,就比單單給一個硬邦邦的二維碼要吸引人得多啦!你是不是也想試試做這種分享圖呢?我們今天就來討論一下如何實現這樣的分享圖。

實現這種合併圖文的方案,選擇無外乎就是在前端做還是在後端做。如果在後端做的話,可選的技術方案還是挺多的,各種後端語言都有自己的繪圖工具庫,比如nodejs裡可以用node-canvas來做,或者也可以通過呼叫一些圖片編輯軟體(如ImageMagic)來實現。

而在前端做的話,由於微信小程式也提供了一系列基於canvas的繪圖相關API,所以繪製這樣的圖片還是比較簡單易上手的,且除錯起來也比較方便直觀。所以,決定先在小程式前端這邊來實現了。

新增畫布

首先,在小程式裡進行繪圖操作需要用到元件,那我們就先在我們的wxml程式碼中放入如下的:

  1. <canvas< span=""> canvas-id="shareCanvas" style="width:600px;height:900px">

這樣一來我們就有了一個600x900的繪圖區域。然後,我們要開始寫JS程式碼在這張畫布上進行繪圖操作。

步驟1:繪製背景圖

通過觀察《長城你造不造》合成的那張分享圖,我們可以分析得出它的組成主要有以下3個部分:一張大的背景圖,一段動態的文字(xxxx 喊你“一起來為修長城獻磚”),以及一個小程式碼圖片。

那麼我們就先找一張圖片來當做背景圖,將它畫到畫布上去,程式碼大致如下:

const wxGetImageInfo = promisify(wx.getImageInfo)
wxGetImageInfo({
    src: 'http://some-domain/bg.png'
}).then(res => {
    const ctx = wx.createCanvasContext('shareCanvas')
    ctx.drawImage(res.path, 0, 0, 600, 900)
    ctx.draw()
})

在這段程式碼中,我們通過使用wx.getImageInfo這個API來下載一個網路圖片到本地(並可獲取該圖片的尺寸等其他資訊),然後呼叫ctx.drawImage方法將圖片繪製到畫布上,填滿畫布。

步驟2:繪製文字

接著,讓我們來在畫布上繼續繪製一段文字,一般這種宣傳用的分享圖,少不了文字描述,而且可能是根據場景內容不同而產生的動態資訊,比如可能是一篇文章的作者、文章的標題和內容。

我們嘗試下在畫布上新增一段居中顯示的文字:“作者:張傑”,還是基於前面的那段程式碼接著寫:

const wxGetImageInfo = promisify(wx.getImageInfo)
wxGetImageInfo({
    src: 'http://some-domain/bg.png'
}).then(res => {
    const ctx = wx.createCanvasContext('shareCanvas')
    // 底圖
    ctx.drawImage(res.path, 0, 0, 600, 900)
    // 作者名稱
    ctx.setTextAlign('center')    // 文字居中
    ctx.setFillStyle('#000000')  // 文字顏色:黑色
    ctx.setFontSize(22)         // 文字字號:22px
    ctx.fillText(“作者:張傑”, 600 / 2, 500)
    ctx.stroke()
    ctx.draw()
})

由於在canvas上繪製文字不會自動折行,如果要畫一段比較長的文字,可以考慮限制一行的字數,將長文字拆分成幾行來畫。

步驟3:繪製小程式碼

最後,我們在畫布最後新增一個小程式碼,可以是靜態的小程式碼,也可以是比如為每一篇文章動態生成的小程式碼(參考《微信小程式之生成自定義引數小程式二維碼》這篇文章),反正這個小程式碼也就是一張圖片,所以繪製方法跟繪製底圖差不多。最後的程式碼類似如此:

const wxGetImageInfo = promisify(wx.getImageInfo)
Promise.all([
    wxGetImageInfo({
        src: 'http://some-domain.com/background.png'
    }),
    wxGetImageInfo({
        src: 'http://some-domain.com/api/generate/qrcode'
    })
]).then(res => {
    const ctx = wx.createCanvasContext('shareCanvas')
    // 底圖
    ctx.drawImage(res[0].path, 0, 0, 600, 900)
    // 作者名稱
    ctx.setTextAlign('center')    // 文字居中
    ctx.setFillStyle('#000000')  // 文字顏色:黑色
    ctx.setFontSize(22)         // 文字字號:22px
    ctx.fillText(“作者:張傑”, 600 / 2, 500)
    // 小程式碼
    const qrImgSize = 180
    ctx.drawImage(res[1].path, (600 - qrImgSize) / 2, 530, qrImgSize, qrImgSize)
    ctx.stroke()
    ctx.draw()
})

這樣,差不多我們的分享圖就生成好了。

儲存到系統相簿

接著,我們要把它儲存進使用者的系統相簿中去,實現這個功能,我們主要靠wx.canvasToTempFilePath和wx.saveImageToPhotosAlbum這兩個API。

主要的流程就是先通過wx.canvasToTempFilePath將上繪製的影象生成臨時檔案的形式,然後再通過wx.saveImageToPhotosAlbum進行儲存到系統相簿的操作。

const wxCanvasToTempFilePath = promisify(wx.canvasToTempFilePath)
const wxSaveImageToPhotosAlbum = promisify(wx.saveImageToPhotosAlbum)
wxCanvasToTempFilePath({
    canvasId: 'shareCanvas'
}, this).then(res => {
    return wxSaveImageToPhotosAlbum({
        filePath: res.tempFilePath
    })
}).then(res => {
    wx.showToast({
        title: '已儲存到相簿'
    })
})

根據業務需求可以選擇(下載圖片並且顯示下載進度),

 downloadTask.onProgressUpdate((res) => {
       if (res.progress === 100) {
         this.setData({
          progress: ''
         });
       } else {
        this.setData({
           progress: res.progress + '%'
        });
     }

以上就是在微信小程式裡合成一個朋友圈分享用的小程式推廣圖片的簡要流程了!

相關推薦

程式生成圖片分享朋友

通過社交軟體分享的方式來進行營銷小程式,是一個常用的運營途徑。小程式本身支援直接將一個小程式的連結卡片分享至微信好友或微信群,然後別人就可以通過點選該卡片進入該小程式頁面。但是小程式目前不支援直接分享到微信朋友圈,而對我們來說,微信朋友圈又是一個很重要的吸引別人關注的入口,所

程式生成圖片分享

通過社交軟體分享的方式來進行營銷小程式,是一個常用的運營途徑。小程式本身支援直接將一個小程式的連結卡片分享至微信好友或微信群,然後別人就可以通過點選該卡片進入該小程式頁面。但是小程式目前不支援直接分享到微信朋友圈,而對我們來說,微信朋友圈又是一個很重要的吸引別人關注的入口,所

程式——自定義分享按鈕(完整版)

1.宣告 onShareAppMessage 函式   onShareAppMessage() {          return {        title: '彈出分享時顯示的分享標

程式生成專屬推廣海報

現在老闆一般都需要線上推廣功能,通過給使用者好處來刺激使用者裂變分銷,這就需要我們給使用者生成專屬的推廣海報 因為小程式的使用者uid是唯一的並且是不變的,所以我們後臺大哥就以使用者的uid作為生成專屬二維碼的圖片名稱,這裡我們用canvas來繪製海報,廢話不

程式canvas生成圖片儲存到本地 部分全面屏手機顯示出生成圖片

問題總結:     1,canvas生成的圖片隱藏不了(下文解決)     2,網路圖片開發工具顯示但是真機顯示不了 (下文解決)     3,canvas生成的圖片清晰度問題 jpg (圖片的質量,目前僅對 jpg 有效。取值範圍為 (0, 1],不在範圍內時當作 1

程式生成自定義引數程式二維碼

掃碼已經成為一種常見又方便的進入移動應用的途徑,可以把線上線下的使用者流量帶入你的移動應用中來。微信小程式也提供了掃碼進入的功能,可以通過掃描二維碼或者微信小程式專有的小程式碼,進入到相應的小程式頁面。 微信官方提供了3個不同的REST API用於生成帶引數的小程式

程式canvas合成圖片 分享

先要獲取圖片的資訊  然後將需要合成的內容用canvas繪製出來,得到一個合成好的畫布,接下來用 wx.canvasToTempFilePath 把當前畫布指定區域的內容匯出生成指定大小的圖片,並返回檔案路徑。這個時候的路徑 是微信的臨時路徑,瀏覽器是訪問不了的,因此需要請求

程式canva生成圖片,長按圖片識別程式二維碼詳解

下面這個圖片就是通過圖片和文字等內容合成的一張帶有微信小程式二維碼的圖片,在小程式內部長按可以識別出來: 基本思路是先將內容用canvas排好版,然後把該canvas轉化成圖片;圖片利用wx.previewImage進行展示,才能識別圖片中的微信小程式二維

11.程式canvas生成圖片並儲存到手機

在小程式中,會有這樣一種需求,儲存某一個頁面並將其分享到朋友圈。一般的做法是:將這個頁面用canvas繪製出來,通過wx.canvasToTempFilePath,把當前畫布指定區域的內容匯出生成指定大小的圖片。然後再通過wx.saveImageToPhotosAlbum,儲存圖片到系統相簿。由

Android 分享程式圖片優化

      小菜上週接入了微信分享小程式的入口,基本功能實現都沒問題,有需要的朋友可以瞭解一下 Android 分享微信小程式失敗二三事,雖然功能都正常,但整體測試發現圖片展示效果不佳。於是小菜整理了一個簡單的小方法處理一下圖片!  

程式canvas畫圖生成圖片下載

要實現的功能:點選朋友圈按鈕彈出分享圖片:點選儲存分享圖片儲存到手機實現程式碼:1.分享按鈕點選事件 /** * 分享 */ weixinShare:function(){ var that = this; console.log(111); share.canvas

程式圖片的上傳與下載

大家都知道,小程式有著大量的api,檔案(圖片)的上傳也是其中之一. 給大家分享一下個人的用法.我所做的是一個類似空間日誌的圖文釋出以及混排. 首先是圖片的選擇,使用wx.chooseImage,將選中

程式分享頁面如何返回首頁

<!--index.wxml--> <view class="container"> <text>我是首頁</text> <button bindtap='goLogs'>go logsPage</button> </view&

程式分享或轉發功能(自定義button樣式)

小程式頁面內發起轉發 通過給 button 元件設定屬性open-type="share",可以在使用者點選按鈕後觸發 Page.onShareAppMessage 事件,如果當前頁面沒有定義此事件,則點選後無效果。相關元件:button wxml: <!-- 分享 --> <!--/

程式圖片

微信小程式選擇圖片、預覽圖片、長按刪除圖片以及上傳圖片。 wxml部分: <view class='imgs'> <block wx:for="{{tempFilePaths}}" wx:for-item="image"> &l

七牛雲程式上傳圖片

業務流程 客戶端在上傳資源到七牛雲端儲存之前要先從業務伺服器獲取一個有效的上傳憑證,因此需要先後和兩個服務端打交道。 由此圖可知,我們要獲得雲連結,要配微信小程式前端、後臺。 這裡,我選用Java的Dynamic Web project作為後臺

Slog71_選取、上傳和顯示本地圖片GET !(程式雲開發-全棧時代3)

ArthurSlog SLog-71 Year·1 Guangzhou·China Sep 12th 2018 道常無為而無不為 開發環境MacOS(High Sierra 10.13.5) 需要的資訊和資訊源: 前言 ”雲開發

程式----上傳圖片

  微信小程式上傳圖片用到的api wx.chooseImage(OBJECT)wx.previewImage(OBJECT)wx.uploadFile(OBJECT) 這幾個基本的api的使用方法可

程式頁面樣式以及背景圖片顯示問題

一、背景 下面這些都是在開發的過程中,記錄下來的筆記。 二、樣式及背景圖片顯示問題 1、修改單個頁面的背景色: 在頁面的wxss裡面加上這句程式碼: page{ background-color: lightcyan; } 2、小程式

【騰訊優測乾貨分享程式自動化親密接觸

導語 山雨欲來風滿樓,最近微信小程式相關開發文章吹遍大江南北,亦有摧枯拉朽永珍更新之勢。問小程式形為何物,直教IT眾生怡情悅性高潮迭起。作為一名有著遠大理想“包袱”與網際網路變革 “使命感”的測試工程師,我再也按耐不住內心中的渴望與好奇,代表測試行業各