この手の画像生成には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 !無事出力できたようです。
確認
それでは出力された画像をブラウザで確認してみます。
。。。。ちょっと思った感じと違いますが、とりあえず合成できたのでよしとします。
今回は以上です。