memorycraftです。
今回はnode.jsを利用して、画像合成をしてみたいと思います。
この手の画像生成にはImageMagickがよく使われますが、ImageMagickから派生したGraphicMagickがImageMagickよりもパフォーマンスが優れているのでこちらの方を利用します。
node.js内からは、GraphicMagick/ImageMagickを使用できるgmというモジュールを利用します。
今回node.jsは久しぶりなので、nodeのインストールから始めてみたいと思います。
他のLL言語などでもそうですが、nvmやenv系などインストール環境管理ツールが乱立しているようです。
今回はnodebrewが便利そうなので、nodebrewを使ってみました。
GraphickMagickのインストール
yumでインストールします。
# yum install gcc-c++ GraphicsMagick -y
nodebrewを使ったnode.jsとモジュールのインストール
nodebrewでは、インストール実行した場所だけにファイルが作られるようで環境を汚さず、rootでなくともインストールが可能なことが特徴のようです。
インストールを行い、PATHを通すだけで完了なので、とても簡単です。
# cat /etc/profile.d/nodebrew.sh
#!/bin/bash
export NODE_PATH=$HOME/.nodebrew/current/node_modules
export PATH=$HOME/.nodebrew/current/bin:$PATH
$ source /etc/profile
$ cd ~/
$ curl https://raw.github.com/hokaccha/nodebrew/master/nodebrew | perl - setup
$ nodebrew install latest
$ nodebrew use latest
$ node -v
v0.11.11
$ npm install gm
$ npm install argv
実装
image.js
画像合成のメイン処理です。引数の画像URLをダウンロードして画像合成します。
gmcomposite.js
合成を子プロセスで実行する箇所をモジュール化したものです。
画像部品の配置
今回の合成ではfacebookのプロフィール写真がどうにも無愛想なので、かわいくしてみたいと思います。 合成素材用のディレクトリ、合成後の出力先のディレクトリを作成します。
$ mkdir -p assets rslt/convert rslt/composite rslt/download
$ tree ~/
/home/memorycraft/
|-- assets
| `-- frame.png //合成素材(マスク+ベース兼用)
|-- gmcomposite.js
|-- image.js
|-- node_modules
| |-- argv
| `-- gm
|-- rslt
| |-- composite
| |-- convert
| `-- download
`-- tmp
また、httpdサーバのドキュメントルートから出力先ディレクトリにリンクします。
# chmod 755 /home/memorycraft/
# cd /var/www/html
# ln -s /home/memorycraft/rslt rslt
assetsディレクトリにマスク素材を配置します。
frame.png
実行
それでは実行します。 オプション引数にfacebookの画像URLと、facebook ID(画像名につかうだけなので何でも良い)を渡します。
$ node image.js -u http://fbcdn-sphotos-b-a.akamaihd.net/hphotos-ak-prn1/t1/1525482_10202990719234672_615625235_n.jpg -f memocra
create complete !
無事出力できたようです。
確認
それでは出力された画像をブラウザで確認してみます。
。。。。ちょっと思った感じと違いますが、とりあえず合成できたのでよしとします。
今回は以上です。
こちらの記事はなかの人(memorycraft)監修のもと掲載しています。
元記事は、こちら