uzullaがブログ

uzullaがブログです。

YoyaMagick で Image::Magick (PerlMagick)

ユーザーランドにYoyaMagickをいれて、plenvでいれた最新版のPerlにそのYoyaMagickのImage::Magick(PerlMagick)を入れて、アニメーションGifをリサイズしたりのサンプルを動かすまでの手順を紹介します。


あまり難しいテストはしていないので、完全に動作しているかはわかりませんが、


とかいてしまったからには、やった手順くらいはブログにかかないとやばいですねということで書きました。

前説:YoyaMagickとは

https://github.com/gree/YoyaMagick
http://labs.gree.jp/blog/date/2013/05/
アニメーションGifを扱う場合において、ImageMagickよりも高速で、ImageMagickと(ファイル名からREADMEまでw)コンパチで、GraphicsMagick*1よりも高品質、という感じなものです。


でも、正直な所、私はベンチマークとかしてないんで、ホントーに速いかとか、ホントーに綺麗かとかは、皆さんがちゃんも確認して、それをブログに書きましょう。僕は「すげー!はやいんだ!綺麗なんだ!」って鵜呑みにして入れました!

設置先ディレクトリの前提

~/yoya/ 適当なファイル置き場
~/opt/ YMやautoconfのローカルインストール先

下準備について

libjpeg、libpngなどいれておきましょう

#centOS
yum install libjpeg* libpng*
#Deb系(いや、今ならUbuntu系というべきか)
apt-get install libjpeg-dev libpng-dev (だったかな?

(後述のYoyaMagickのconfigure結果で、これらのライブラリのsupportがでるので、ちゃんと見ておきましょう)


Perlについては、かならずYoyaMagickをビルドする前にplenvなどで、必要なPerlをいれて設定を終わらせておきます。
plenv:https://github.com/tokuhirom/plenv
plenvのお役立ちスクリプトはこちら http://yellowstore.blogspot.jp/2013/05/plenvrbenv.html

CentOSerには、追加で必要な下準備

今回は私はCentOS 6.4をつかいました、CentOSは最新バージョンでもautoconfのバージョンが2.63と古いので、gnuのサイトからLatestなりをとってきていれる必要があります。
別にグローバルに入れる必要もないので、これもローカルに入れてしまえます。

cd ~/yoya/
wget http://ftp.gnu.org/gnu/autoconf/autoconf-latest.tar.gz
tar xvzf autoconf-latest.tar.gz
cd autoconf-2.69/
configure --prefix=$HOME/opt/
make all
make install

autoconfをローカルにいれたら、Pathが先に来るようにしましょうね。

export PATH=$HOME/opt/bin:$PATH

ビルド作業の間だけ効いていればいいので、.bash_profileとかに書かなくても良いです。


autoconfをいれるときに、もしかして最新版のM4も必要かもしれません

cd ~/yoya/
wget http://ftp.gnu.org/gnu/m4/m4-latest.tar.gz
tar xvzf 〜
configure --prefix=$HOME/opt/
make all
make install
export M4=$HOME/opt/bin/m4 #必要だったような…

まあここらへんはググればでてきます。

YoyaMagickのビルド

ここからはすぐです。

cd ~/yoya/
git clone https://github.com/gree/YoyaMagick
cd YoyaMagick
./configure --prefix=$HOME/opt --with-perl
make all
make install
(ここまででYoyaMagickのコマンドインストール完了、これ以下Image::Magickのインストール)
cd PerlMagick
perl Makefile.PL
make
make install

あっさりですね。*2


ちなみに、

`pm_to_blib' に必要なターゲット `Q16.pm' を make するルールがありません.

みたいなことを言われたりしてmakeで失敗する時は、YoyaMagick
のconfigure で、--with-perlをちゃんとつけているか確認しましょう。

適当なコードでテストしてみる

これでImage::Magickがインストールされたはずですので、テストです。

#!/usr/bin/env perl
use Image::Magick;
$p = new Image::Magick;
$p->Set(size=>'10x10');
$p->ReadImage('canvas:white');
$p->Set('pixel[5,5]'=>'red');
$p->Write("test.jpg");

test.jpgという真っ白の中心に赤を1ドット打ったファイルが生成されます。
特にエラーがでなかったら、大丈夫でしょう。

アニメーションGifをバラしてみる

wget -O moz.gif "http://medias.gifboom.com/medias/f29e5ea82c0d471ca686727b189fabe4@2x.gif#" #*3
mkdir tmp/
perl yoya2.pl #yoya2.plは後述
ls tmp/
(たくさんのJPGが…)

yoya2.pl

#!/usr/bin/env perl
use Image::Magick;
$p = new Image::Magick;
$p->ReadImage('moz.gif');
$p->Write("tmp/test%03d.jpg");

アニメーションGifを組み立ててみる、ついでにリサイズも

perl yoya3.pl # yoya3.plは後述
open moz2.gif # moz2.gifが出来てるので適当に

yoya3.pl

#!/usr/bin/env perl
use Image::Magick;
$p = new Image::Magick;
$p->ReadImage('tmp/test*.jpg');
$p->Resize(
    geometry => "50x50",
);
$p->Write("moz2.gif");

どうですか?問題ないですね!

さて最初にベンチマークとってないって書きましたけど、YoyaMagick実際速い気がします。
品質はどうなんでしょうね?GraphicsMagickをあんまつかってないので、よくわからない。
そういうのは他の人に譲ります。


そして、今回入れたImage::Magick、前回のHachioji.pmハッカソン( http://hachiojipm.org/?p=535 )の時には戦略的撤退でconvertコマンドを使うようにしましたが、さすがにコマンドと違って拡大縮小回転減色自由自在です、チョー楽に色々できてチョー楽しい。
Pyazo( https://github.com/uzulla/pyazo ) にiPhoneからビデオ(MP4)を投稿すると面白い、という事に気づいたので(しかしながら、サイズがヤバくて人が死ぬ)、いろいろ変換するのにもよさそうであります。


まあYoyaMagickをつかってるってだけで「俺はImageMagickとか遅くてつかってないぜ!、GraphicsMagickとか画質がわるくてつかってらんないぜ!」とかドヤ顔できるかもしれませんし、実際この間のハッカソンでしましたので、満足です。ありがとうございます>作者様


さあみなさん、これで高速にアニメーションGifとかを生成しまくれますので、無駄にファイルサイズばかりでかい猫のGifでも作ってガンガンアップロードしまくり、いろんな所のインフラ担当者の方々から呪詛をはかれまくりましょう。


おわり

最近わすれてた宣伝

http://tailf.cfe.jp/
あなたのInstagramFacebookGoogle+Picasa)の画像を。TOLOTフォトブック(http://tolot.com/)用のデータに超カンタン変換します。
500円で62枚のフォトブックは前代未聞の安さとおもいますので、是非。

どうでもいいですけど、最近Google+のアルバムが超絶使いやすくなってていいですね。

リリース時の詳細エントリ

http://uzulla.hateblo.jp/entry/2013/05/08/124552

Youtubeにあがっている、利用者のレポート


TAILFでinstagramフォトブックを作ろう! - YouTube

*1:IMよりも高速なライブラリ、IM互換あり

*2:つーか、Image::Magick(PerlMagick)ってcpanmとかで入らなくて糞うざいですよね、これどうにかならないんですかね。

*3:http://twitter.com/moznion