微信小程序如何裁剪圖片作為轉發(fā)封面?

我們知道微信小程序的轉發(fā)時的封面圖片比例固定為5:4芳撒,具體內容詳見小程序開發(fā)文檔:

字段 說明 默認值 最低版本
title 轉發(fā)標題 當前小程序名稱
path 轉發(fā)路徑 當前頁面 path ,必須是以 / 開頭的完整路徑
imageUrl 自定義圖片路徑未桥,可以是本地文件路徑笔刹、代碼包文件路徑或者網(wǎng)絡圖片路徑。支持PNG及JPG冬耿。顯示圖片長寬比是 5:4舌菜。 使用默認截圖 1.5.0

但是,在實際開發(fā)時我們有時需要將某張動態(tài)請求的網(wǎng)絡圖片作為轉發(fā)封面圖(比如文章封面)亦镶,而這張圖片又往往不符合 5:4 的比例要求日月。這時,如果我們直接將這張圖片作為封面圖其實也是可以的缤骨,只不過將長寬比大于 5:4 作為轉發(fā)封面時爱咬,封面下可能會留有部分空白。

我們可以直接以簡書為例绊起,簡書小程序中文章的轉發(fā)封面是取自該文章的封面精拟,所以,如果我們從小程序中轉發(fā)可能會看到類似下圖的轉發(fā)封面圖:

可以看到虱歪,封面圖下面存在大塊空白蜂绎,如果圖片長寬比例更大,那么下面的空白也將更大笋鄙。

因此师枣,為了更加美觀,我們必須將圖片按照 5:4 比例進行適當?shù)夭眉粝袈洌覍懕疚牡哪康囊舱侨绱恕?/p>

1. 創(chuàng)建Canvas畫布

前端要裁剪圖片践美,我們首先就要想到用Canvas洗贰,寫H5如此,微信小程序當然也是如此拨脉。

<canvas style="position: absolute; top: -1000px; left: -1000px; width: 640px; height: 640px; background: #000" canvas-id="canvas"></canvas>

我們要用到的canvas當然不能直接在頁面中顯示哆姻,所以可以使用負定位值的方式將其隱藏。

2. 下載網(wǎng)絡圖片

我們可以使用wx.downloadFile()來下載網(wǎng)絡圖片玫膀,也可以使用wx.getImageInfo()矛缨,因為我們這里需要獲取到圖片的寬高,所以這里就要用到wx.getImageInfo()來進行圖片的下載帖旨。

wx.getImageInfo({
      src: "",  // 這里填寫網(wǎng)絡圖片路徑 
      success: (res) => {
        // 這個是我封裝的裁剪圖片方法(下面將會說到)
        clipImage(res.path, res.width, res.height, (img) => {
          console.log(img);  // img為最終裁剪后生成的圖片路徑箕昭,我們可以用來做為轉發(fā)封面圖
        }); 
      }
});

3. 裁剪圖片并導出

以下是我封裝的專門用于裁剪圖片比例大于 5:4 的圖片,裁剪方式是截取圖片中間部分(當然你也可以試著寫下裁剪小于 5:4 的圖片):

/* 裁剪封面解阅,
   src為本地圖片路徑或臨時文件路徑落竹,
   imgW為原圖寬度,
   imgH為原圖高度货抄,
   cb為裁剪成功后的回調函數(shù)
*/
const clipImage = (src, imgW, imgH, cb) => {  

  // ‘canvas’為前面創(chuàng)建的canvas標簽的canvas-id屬性值
  let ctx = wx.createCanvasContext('canvas');  
  let canvasW = 640, canvasH = imgH;

  if (imgW / imgH > 5 / 4) { // 長寬比大于5:4
    canvasW = imgH * 5 / 4;
  }

  // 將圖片繪制到畫布
  ctx.drawImage(src, (imgW - canvasW) / 2, 0, canvasW, canvasH, 0, 0, canvasW, canvasH) 
// draw()必須要用到述召,并且需要在繪制成功后導出圖片
 ctx.draw(false, () => {
    setTimeout(() => {
      //  導出圖片
      wx.canvasToTempFilePath({
        width: canvasW,
        height: canvasH,
        destWidth: canvasW,
        destHeight: canvasH,
        canvasId: 'canvas',
        fileType: 'jpg',
        success: (res) => {
          // res.tempFilePath為導出的圖片路徑
          typeof cb == 'function' && cb(res.tempFilePath);
        }
      })
    }, 1000);
  })
}

本文重點總結

① 使用Canvas畫布進行圖片裁剪
② 裁剪網(wǎng)絡圖片前,必須使用wx.getImageInfo()下載圖片并同時獲取圖片的寬高

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末蟹地,一起剝皮案震驚了整個濱河市积暖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌怪与,老刑警劉巖夺刑,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異分别,居然都是意外死亡遍愿,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門耘斩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沼填,“玉大人,你說我怎么就攤上這事煌往∏悴福” “怎么了?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵刽脖,是天一觀的道長羞海。 經常有香客問我,道長曲管,這世上最難降的妖魔是什么却邓? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮院水,結果婚禮上腊徙,老公的妹妹穿的比我還像新娘简十。我一直安慰自己,他們只是感情好撬腾,可當我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布螟蝙。 她就那樣靜靜地躺著,像睡著了一般民傻。 火紅的嫁衣襯著肌膚如雪胰默。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天漓踢,我揣著相機與錄音牵署,去河邊找鬼。 笑死喧半,一個胖子當著我的面吹牛奴迅,可吹牛的內容都是我干的。 我是一名探鬼主播挺据,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼取具,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了扁耐?” 一聲冷哼從身側響起者填,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎做葵,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體心墅,經...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡酿矢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了怎燥。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瘫筐。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖铐姚,靈堂內的尸體忽然破棺而出策肝,到底是詐尸還是另有隱情,我是刑警寧澤隐绵,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布之众,位于F島的核電站,受9級特大地震影響依许,放射性物質發(fā)生泄漏棺禾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一峭跳、第九天 我趴在偏房一處隱蔽的房頂上張望膘婶。 院中可真熱鬧缺前,春花似錦、人聲如沸悬襟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脊岳。三九已至逝段,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間逸绎,已是汗流浹背惹恃。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留棺牧,地道東北人巫糙。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像颊乘,于是被迫代替她去往敵國和親参淹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,492評論 2 348

推薦閱讀更多精彩內容