さくらVPSにImageMagick(imagick)を入れてPHPから使う

ImageMagickロゴの魔法使い手軽なGDとは裏腹に強力な機能がこれでもかと用意されているImageMagick。GDと同じようにPHPから画像処理を行えます。

ちなみにiPhone Screenshot Makerは今のところGDのみで動いていますが、次のバージョンではImageMagickも使います。新機能がGDだけでは厳しくなってきたんですね。

そんなわけで、xampp(Windows)にImageMagick(imagick)をインスコしてPHPから使うに引き続いて、今回はさくらVPSにImageMagickをインストールしたいと思います。

 

ImageMagickをPHPから使うには

ImageMagickはPHP専用のプログラムではなく、コマンドラインやPerl・Rubyなどからも利用できます。PHPからImageMagickを使うには「Imagick」というモジュールを通して行います。つまり、ImageMagickとimagickの2つをインストールする必要があります。

インストールは侍エンジニア記さんの記事を参考に進めました。

いつものyumでImageMagickをインストールするのですが、その前にPHPの拡張パッケージであるphp-develを入れる必要があります。imagickはPECLというPHPのライブラリで提供されていますが、PECLがphp-devel内のphpizeを必要とするためです。PEARはPHPで記述されてますが、PECLはCなので高速です。

yum -y install php-devel

この-develってのは「development」の略で開発向けという意味。+αな機能を追加するみたいなイメージです。ImageMagickのように色々追加したい人は-develでインストールしてPHPをフルパッケージにしておく必要があります。

ちなみに私はさくらVPSでスタートダッシュ決めた後はこーすりゃいいの?で、phpと一緒にphp-develも入れてました。

php-develの次は、ImageMagickを-develでインストール。

yum -y install ImageMagick-devel

最後にPECLのimagickをインストールします。pearのように、通常はpeclコマンドを利用するべきですが、メモリエラーが発生する可能性があるようなので、peardevを使ってインストール。

peardev install pecl/imagick

インストールが終わると、php.iniにextension=imagick.soを追加してよっと次の一手をサジェストしてくれます。

install ok: channel://pecl.php.net/imagick-3.0.1
configuration option "php_ini" is not set to php.ini location
You should add "extension=imagick.so" to php.ini

ここまででインストールは完了。最後に設定です。php.iniにimagickを追加します。

 

php.iniもといphp.dに設定ファイルを追加

あとはphp.iniに、extension=imagick.soを追加するだけなんですが、最近はextensionを/etc/php.d/内にiniファイルを追加することでphp.iniに反映させるようです。iniファイルの中身はimagickに関する記述をするわけですが、今回はとりあえず追加のみなので、

extension=imagick.so

の1行だけです。ファイル作成にはechoコマンドを使います。

echo extension=imagick.so > /etc/php.d/imagick.ini

以上で設定は完了。apacheを再起動して反映。

service httpd restart

成功したか見てみます。phpinfo()などでブラウザから確認しても良いのですが、VPSらしくコマンドラインでチェック。

php -i | grep imagick

php -iの出力をパイプでgrepに渡すことで、imagick文字列が存在する行だけ抜き出されます。

/etc/php.d/imagick.ini,
imagick
imagick module => enabled
imagick module version => 3.0.1
imagick classes => Imagick, ImagickDraw, ImagickPixel, ImagickPixelIterator
imagick.locale_fix => 0 => 0
imagick.progress_monitor => 0 => 0