PHPとImageMagick2
PHPで画像の処理を行うには、主にGD系とImageMagick系がある。今までは、普通にGDを使っていたのだけれど、ImageMagickは多数の画像形式に対応していて、便利な関数もたくさんあるという。ので乗り換えてみようと思った。
php.iniのextensionにphp_imagickを追加してapacheを再起動。
phpinfo()でimagickが表示されているのを確認。
早速使ってみる。
Call to undefined function。…関数が見つからないってさ。
よくよくphpinfo()を見ると、versionが2.0.0-alpha。ありゃ。
ここのマニュアルは0.9系用なのでほとんど意味無し。
どうせ2.0系使うなら最新版を、と思ったがWindows用PECLのスナップショットではビルドに失敗しているようだ。わざわざビルド環境を整えるのが面倒くさいので、これで我慢しよう。
2.0系はクラス化されているので使用方法がだいぶ違う。
が、どこを探しても2.0系の解説がほとんど無い!
ここのマニュアルを参考にさせてもらいながら試行錯誤。
微妙にメソッドが有ったり無かったり。これはα版とか使ってるからだけど。
仕方ないのでphp_imagickから関数名らしき文字列を抜き出して使用。
サムネイルを作るにはこんな感じ。
$im = new Imagick();
$im->readimage( '/tmp/test.png' );
// 72pxでサムネイル作成
if ($im->getImageWidth() > $im->getImageHeight()) {
$im->thumbnailImage( 72, 0 );
} else {
$im->thumbnailImage( 0, 72 );
}$im->writeimage( '/tmp/test2.png' );
$im->destroy();
判定しているところがあまり美しくないですが、resizeImage()やscaleImage()との違いがいまいちわからんので、確実な解説のあるほうで。
ついでの画像をグレーにする方法。
$im->setimagecolorspace(Imagick::COLORSPACE_GRAY);
こりゃ楽チン。
さらに画像の合成。
$_im = new Imagick();
$_im->readimage( '/tmp/test3.png' );
$x = 100;
$y = 100;
$im->compositeimage($_im, Imagick::COMPOSITE_OVER, $x, $y);
$_im->destroy();
COMPOSITE定数の意味がはっきりしないので適当。
ってことで単純な作業ならなんとか使えるが、ドキュメントがそろわないと使いづらすぎてたまらん。ImageMagickのソースは読む気にならんし。
#あと気になったのはメソッド名。大文字小文字関係ないのか?