最近我在用JS做好玩兒的事情,需要處理圖片。網路上很多教程,各種方法五花八門,某些方法不一定行的通。本文給你分享一個被作者驗證能用的方法,使用NodeJS處理圖片。
npm i gm
gm是一個Node函式庫,提供了一些JS API,讓開發者可以處理圖片。但是它底層依賴了GraphicsMagick、要嘛或ImageMagick。其實gm就是呼叫那兩個工具的命令列。
也就是說,除了安裝gm,我們還需要安裝要嘛GraphicsMagick、要嘛ImageMagick。
ImageMagick作者是MacOS,直接選擇了安裝ImageMagick。
依照官網指令,只需要1行程式碼(前提是你已經在Mac上安裝了brew):
brew install imagemagick --with-webp
介紹一下參數--with-webp
,你是可以刪掉的,但如果你希望處理webp格式的圖片,一定要加上。
用brew比較方便,自己不用操心環境變數了。
GraphicsMagick
當然,如果你不用ImageMagick,想用GraphicsMagick也是完全可以的:
brew install graphicsmagick
一開始我選擇了安裝ImageMagick,這麼寫,總是報錯:
const gm = require('gm'); gm('圖片檔案路徑').crop(width, height, 0, 0).resize(width2, height2).quality(quality).write('輸出檔案路徑', function (err) { if (err) { return console.log(err); } else { console.log('success'); } });
如果要用ImageMagick,上面寫法其實是不對的,應該這樣寫,明確指定我要用ImageMagick
工具:
const g = require('gm'); const gm = g.subClass({imageMagick: true}); gm('圖片檔案路徑').crop(width, height, 0, 0).resize(width2, height2).quality(quality).write('輸出檔案路徑', function (err) { if (err) { return console.log(err); } else { console.log('success'); } });
記錄一下gm的常用功能,供大家備忘:
注意:gm是可以鍊式呼叫的,寫起來很爽,從gm(filename)讀取圖片文件,一層一層處理,最後寫入檔案.write(filename, callback)。
縮放圖片
.resize(width, height)
裁切圖片
.crop(width, height, x, y)
旋轉圖片
.rotate(color, deg)
color是背景色(如果deg旋轉角度不是90的倍數,背景色就派上用場了,用'#ededed'這種格式就好)