Node.jsでBOTを作る途中で簡単な画像処理をしてみたくなったので、それらしい方法を探してみました。
まずはnpmでインストールできるパッケージを探して、
- html5のcanvas要素を使う canvas
- ImageMagickというソフトを使う node-imagemagick
- GraphicsMagickというソフトを使う gm
が見つかりました。
他ソフトに依存したくないのでcanvasを使おうと思いましたが、
node-gyp
関連のエラーで断念。
まぁよくあることなので気にしない。
多少でも使い慣れてるImageMagickを使うことにしました。
http://www.imagemagick.org/script/download.php
ここからWindows版のstaticバージョンをインストール。
デフォルトでC:\Program Files\ImageMagick-7.0.8-Q16\magick.exe
にある実行ファイルを複製して convert.exe
に変更します。(npmパッケージから参照するため)
最後に npm install imagemagick
でパッケージインストールすれば準備完了です。
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
const im = require('imagemagick'); //基本的に convert コマンドしか使わない im.convert(['in.jpg', '-resize', '25x30', 'out.jpg'], function(err, stdout){ if (err) throw err; /*do something*/ }); //imageMagickのコマンドをそのまま書いて分割してもよい let cmd = "a.gif b.gif -geometry +100+0 -composite c.gif -geometry +200+0 -composite "+ "-resize 300x100 z.gif"; im.convert(cmd.split(" "), function(err, stdout){ if (err) throw err; }); |
所感
コマンドラインから実行できるソフトがあればnode.jsは直接実行可能なのですが、使いやすいものはそうそうないのでこんな形になりました。
GraphicMagickの方が早いという意見も見ましたが、速度に不満はないのでとりあえずこのまま使ってみます。