画像の合成
複数の画像を合成して1枚の画像を生成する簡易アバター的なサンプルを作成します。次の3つの画像を合成して1枚の画像として表示します。



合成後の画像は、以下です。

画像の合成にはImagickのcompositeImageメソッドを利用します。
$image->compositeImage(合成する画像のImagickオブジェクト, 合成する画像の合成演算定数, 合成開始の縦位置, 合成開始の横位置);
合成演算定数とはcompositeImageメソッドで画像を合成する際の合成の属性を指定するPHPの予約済み定数です。代表的な合成演算定数には以下のものがあります。
| 合成演算定数 | 概要 |
| COMPOSITE_OVER | 画像を画像にかぶせる |
| COMPOSITE_PLUS | 画像を対象画像に加え、対象画像を置き換える |
| COMPOSITE_MINUS | 画像を対象画像から引き、対象画像を置き換える |
| COMPOSITE_COPY | 画像を対象画像の上に配置する |
// 顔の画像の読み込み
$image = new Imagick( 'images/base.gif' );
// 目の画像の読み込み
$imageEye = new Imagick( 'images/eye.gif' );
// 顔の画像に合成
$image->compositeImage( $imageEye, Imagick::COMPOSITE_OVER, 0, 0 );
// 口の画像の読み込み
$imageMouse = new Imagick( 'images/mouth.gif' );
// 顔の画像に合成
$image->compositeImage( $imageMouse, Imagick::COMPOSITE_OVER, 0, 0 );
// 画面出力
$image->setImageFormat("gif");
Header("Content-Type: image/gif");
echo $image;
compositeImageメソッドを利用すると上記のようにImagickで読み込んだ画像の合成が比較的容易にできます。サンプルのように2枚以上の画像を連続して合成することも可能です。
まとめ
本記事では画像上に文字列を描画する方法をImagickとImagickDrawクラスを使って説明しました。
画像に文字を描いたり、枠をつけたりしてメールで送信するデコメールや複数の画像を合成してキャラクターを装飾するアバターシステムなど、Imagickを利用することで比較的楽に実現することができます。工夫次第では他にもさまざまな応用ができると思いますので、皆さんもぜひ使いこんでみてください。
