だいこんの日々2

軸足をtwitterとfacebookに移しつつも、技術的な話はここに書いていきます。

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のソースは読む気にならんし。

#あと気になったのはメソッド名。大文字小文字関係ないのか?