使用 Node.js 快速搭建圖片處理服務(wù)

前言

難度:簡單
類型:step-by-step
適用:有 node.js 基礎(chǔ)和 linux 基礎(chǔ)
開發(fā)環(huán)境:jdk 1.8
關(guān)鍵詞:node.js graphicsmagick imagemagick
筆者環(huán)境:macOS
服務(wù)器環(huán)境:CentOS 7

目標(biāo):

  • gm 和 im 的底層類庫的安裝
  • nodejs 的Restful簡單項目搭建
  • gm&im for node 庫的基本使用
  • 完成簡單的 Restful 圖片處理服務(wù)

1. 底層支持

1.1 支持類庫安裝

由于默認(rèn) gm 和 im 都不帶 jpeg 和 png 的格式支持,所以需要先安裝這兩個文件格式支持的庫。

1.1.1 開發(fā)環(huán)境

以 macOS 為例,推薦兩種方式,src 編譯安裝或者 homebrew 安裝——

src 下載地址:ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/delegates/

找到對應(yīng)的庫的最新版本的包,例如: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 中對應(yīng)的庫名,如果找不到,請先升級 brew,執(zhí)行命令:brew update。

然后執(zhí)行安裝命令:

>brew install libpng
>brew install libjpeg-turbo

1.1.2 服務(wù)器環(huán)境

以 CentOS7為例,可以選擇上述第一種下載編譯安裝的方式,同樣也可以選擇yum安裝的方式。

執(zhí)行命令:

>yum search libpng
>yum search libjpeg

如果找不到相關(guān)的庫,請更換 yum 源。
找到對應(yīng)的庫執(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。

沒有特殊需求可以直接命令無腦編譯安裝,有特殊要求的話,可以參考兩個網(wǎng)站上的編譯配置,按照自己的需求進(jìn)行配置后編譯安裝。

直接安裝執(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 服務(wù)器環(huán)境

選擇編譯安裝的話,同上,按照地址下載回來,配置編譯并安裝,推薦先升級下服務(wù)器,保證 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)境和服務(wù)器環(huán)境的底層類庫支持都安裝完畢。

2.Node.js 搭建圖片處理服務(wù)

2.1 搭建Restful項目

2.1.1 項目初始化

Node.js 環(huán)境的安裝,這里不在贅述,簡單快速的實現(xià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,不指定,默認(rèn)是用 gm。


增加處理接口,代碼如下:

/**
 * 處理圖片
 */
router.get('/img', function (req, res, next) {

  //圖片 url 參數(shù)
  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() //刪除無關(guān)信息
    .samplingFactor(2, 2) //設(shè)置色彩 4:2:0,降低體積
    .interlace('Line') //設(shè)置為逐行
    .quality(85) //質(zhì)量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
        });
      }
    });

});

例如,隨便百度了一張圖片:
https://ss0.baidu.com/94o3dSag_xI4khGko9WTAnF6hhy/image/h%3D300/sign=13dc7fee3512b31bd86ccb29b6193674/730e0cf3d7ca7bcb6a172486b2096b63f624a82f.jpg

待處理圖片

請求地址:
http://localhost:3000/img?url=https://ss0.baidu.com/94o3dSag_xI4khGko9WTAnF6hhy/image/h%3D300/sign=13dc7fee3512b31bd86ccb29b6193674/730e0cf3d7ca7bcb6a172486b2096b63f624a82f.jpg

處理完成圖片為:
http://localhost:3000/images/resized.jpg

image.png

得到的響應(yīng)數(shù)據(jù)為:

{
status: true,
message: "success"
}

3. 結(jié)語

至此,圖片壓縮處理的 Resuful 服務(wù)搭建完成,想要了解更多的使用信息,可以參考項目文檔,地址:
https://github.com/aheckmann/gm
也可以去 gm 和 im 的官網(wǎng)參考兩個工具的命令文檔,地址為:
http://www.graphicsmagick.org/GraphicsMagick.html
https://www.imagemagick.org/script/command-line-processing.php

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容