NodeJS 调用 ImageMagick

TIP

本教程讲的是用 homebrew 安装 ImageMagick,用 Nodejs 调用 ImageMagick。

1.在 MAC 上安装 homebrew

https://brew.sh/index_zh-cn.htmlopen in new window

2.用 homebrew 安装 ImageMagick

brew install ImageMagick

安装完成后可以在终端里输入 convert,如果跳出来一堆说明,则安装成功

3.使用 nodejs 来调用

这里我演示三种调用的方式:

3.1 命令行

http://www.imagemagick.org/script/command-line-tools.phpopen in new window

在终端里的写法 此处的 67x57 表示宽度 67 像素,高度 57 像素。 还可以用%的写法,如 67%x57%。

convert -resize 67x57 input_pic_path output_pic_path

我这里使用 nodejs 创建子进程来执行我们的命令

var exec = require("child_process").exec;
var cmdStr = "convert -resize 67x57 input_pic_path output_pic_path";
exec(cmdStr, function (err, stdout, stderr) {
  if (err) {
    console.log("error: " + stderr);
  } else {
    console.log("success: " + stdout);
  }
});

3.2im 模块

https://www.npmjs.com/package/imagemagickopen in new window

im 模块是 Imagemagick 官方的调用模块,但是已经很久没有更新过了,而且以后也不会更新

var im = require("imagemagick");
im.convert(
  ["input_pic_path", "-resize", "25x120", "output_pic_path"],
  function (err, stdout) {
    if (err) throw err;
    console.log("stdout:", stdout);
  }
);

3.3gm

https://www.npmjs.com/package/gmopen in new window

它支持 GraphicsMagick 和 ImageMagick,并且还在持续更新中,我建议使用这种方法,因为可以报 bug。

var gm = require("gm").subClass({
  imageMagick: true,
});
gm("input/Desert.jpg")
  .resize(240, 240)
  .noProfile()
  .write("output/Desert.jpg", function (err) {
    if (!err) console.log("done");
  });