前言
難度:簡單
類型:step-by-step
適用:有 node.js 基礎和 linux 基礎
開發(fā)環(huán)境:jdk 1.8
關鍵詞:node.js graphicsmagick imagemagick
筆者環(huán)境:macOS
服務器環(huán)境:CentOS 7
目標:
- gm 和 im 的底層類庫的安裝
- nodejs 的Restful簡單項目搭建
- gm&im for node 庫的基本使用
- 完成簡單的 Restful 圖片處理服務
1. 底層支持
1.1 支持類庫安裝
由于默認 gm 和 im 都不帶 jpeg 和 png 的格式支持伪朽,所以需要先安裝這兩個文件格式支持的庫桐经。
1.1.1 開發(fā)環(huán)境
以 macOS 為例歉眷,推薦兩種方式屡萤,src 編譯安裝或者 homebrew 安裝——
src 下載地址:ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/delegates/
找到對應的庫的最新版本的包隘冲,例如:png 的是lib-1.6.28.tar.gz
,jpeg的是jpegsrc-v9c.tar.gz
。
不過 jpeg 的類庫推薦使用另外一個libjpeg-tubor
,處理性能提升20%以上刨裆,下載地址是:
https://libjpeg-turbo.org/Documentation/OfficialBinaries
下載完成后,執(zhí)行編譯和安裝命令:
>./configure
>make & make install
mac 環(huán)境下還可以選擇 brew 命令安裝彬檀,相對來說更加簡單和方便帆啃,執(zhí)行命令:
>brew search libpng
>brew search libjepg
可以查看到 brew 中對應的庫名,如果找不到窍帝,請先升級 brew努潘,執(zhí)行命令:brew update
。
然后執(zhí)行安裝命令:
>brew install libpng
>brew install libjpeg-turbo
1.1.2 服務器環(huán)境
以 CentOS7為例坤学,可以選擇上述第一種下載編譯安裝的方式疯坤,同樣也可以選擇yum
安裝的方式。
執(zhí)行命令:
>yum search libpng
>yum search libjpeg
如果找不到相關的庫深浮,請更換 yum 源压怠。
找到對應的庫執(zhí)行命令:
>yum install libpng.x86_64
>yum install libjpeg-turbo.x86_64
1.2 圖片處理類庫安裝
1.2.1 開發(fā)環(huán)境
類似支持類庫的安裝方式,同樣可以選擇兩種安裝方式略号,編譯和 brew 安裝。
編譯安裝:
gm 下載地址:http://www.graphicsmagick.org/
im 下載地址:http://www.graphicsmagick.org/
如果想對比下兩個不同的類庫洋闽,可以都下載安裝玄柠,親測無沖突。如果只想盡快搭建诫舅,推薦處理性能更高的 gm羽利。
沒有特殊需求可以直接命令無腦編譯安裝,有特殊要求的話刊懈,可以參考兩個網站上的編譯配置这弧,按照自己的需求進行配置后編譯安裝。
直接安裝執(zhí)行:
>./configure
>make & make install
如果編譯失敗虚汛,請升級GCC匾浪。
命令安裝,跟之前類似卷哩,先搜索類庫蛋辈,然后找到后執(zhí)行 install 命令:
#搜索并安裝gm
>brew search graphicsmagick
>brew install graphicsmagick
#搜索并安裝im
>brew search imagemagick
>brew install imagemagick
#如果想添加對 webp 的支持,執(zhí)行
>brew install imagemagick --with-webp
找不到的話,請升級 homebrew冷溶。
1.2.2 服務器環(huán)境
選擇編譯安裝的話渐白,同上,按照地址下載回來逞频,配置編譯并安裝纯衍,推薦先升級下服務器,保證 gcc 是最新的苗胀,執(zhí)行命令:
>yum update & yum upgrade
然后再編譯安裝襟诸。
選擇 yum 安裝步驟差不多,執(zhí)行命令:
#搜索并安裝 gm
>yum search graphicsmagick
>yum install Graphicsmagick.x86_64
#搜索并安裝 im
>yum search imagemagick
>yum install ImageMagick.x86_64
至此柒巫,開發(fā)環(huán)境和服務器環(huán)境的底層類庫支持都安裝完畢励堡。
2.Node.js 搭建圖片處理服務
2.1 搭建Restful項目
2.1.1 項目初始化
Node.js 環(huán)境的安裝,這里不在贅述堡掏,簡單快速的實現应结,例如創(chuàng)建一個名字叫:test.gm
的項目,執(zhí)行命令:
>express test.gm
>npm install
>npm start
訪問:http://localhost:3000泉唁,成功創(chuàng)建項目鹅龄。
2.2.2 添加 gm和 im 的 支持庫
執(zhí)行命令:npm install gm --save
,這個類庫同時支持 gm 和 im亭畜。
打開project.json扮休,看到dependencies
中多了:"gm": "^1.23.1"
,添加成功拴鸵。
2.2.3 使用 gm 庫處理圖片
打開~/router/index.js
添加對 fs 和 gm 的引用:
var fs = require('fs');
var gm = require('gm').subClass({imageMagick: true});
其中subClass({imageMagick: true})
指定使用 im玷坠,不指定,默認是用 gm劲藐。
增加處理接口八堡,代碼如下:
/**
* 處理圖片
*/
router.get('/img', function (req, res, next) {
//圖片 url 參數
let url = req.query['url'];
if (!url) {
res.send({
status: false,
message: "no url param."
});
return;
}
gm(url) //讀取圖片 url 或者 本地路徑 或者 stream buffer
.resize(100, 100) //按照100*100的尺寸壓縮圖片
.noProfile() //去掉 exif 信息
.strip() //刪除無關信息
.samplingFactor(2, 2) //設置色彩 4:2:0,降低體積
.interlace('Line') //設置為逐行
.quality(85) //質量85聘芜,jpeg大與85體積會成倍增加
//保存到項目靜態(tài)文件地址
.write(global.imagePath + "/resized.jpg", (err) => {
if (err) {
//處理失敗
res.send({
status: false,
message: err.message
});
} else {
//處理成功
res.send({
status: true
});
}
});
});
處理完成圖片為:
http://localhost:3000/images/resized.jpg
得到的響應數據為:
{
status: true,
message: "success"
}
3. 結語
至此,圖片壓縮處理的 Resuful 服務搭建完成汰现,想要了解更多的使用信息挂谍,可以參考項目文檔,地址:
https://github.com/aheckmann/gm
也可以去 gm 和 im 的官網參考兩個工具的命令文檔瞎饲,地址為:
http://www.graphicsmagick.org/GraphicsMagick.html
https://www.imagemagick.org/script/command-line-processing.php