せっかくImagickの話をしたので。

私が最近よく使うのはこういう処理。知ってる人は知ってる処理だと思います。

$a_jpg="ファイル場所/ファイル名.jpg";
$b_gif="ファイル場所/ファイル名.gif";

$a_image = new Imagick();
$a_image->readImage($a_jpg);
$b_image = new Imagick();
$b_image->readImage($b_gif);

//画像合成($a_jpgや$b_gifは別にgifではなくてもjpgでもpngでもOKです。)0,0は数字を入れることで位置をずらして合成できます
$a_image->compositeImage ( $b_image , imagick::COMPOSITE_OVER , 0 , 0 );

//合成したものはjpgですよ!っていう宣言。拡張子をいろいろ混ぜて合成する時に必要だったり。
$a_image->setImageFormat('jpg');

//jpgだったら画質が変更できます。サイズを小さくしたい時は数字をいろいろ変えてください。
$a_image->setImageCompression(Imagick::COMPRESSION_JPEG);
$a_image->setImageCompressionQuality(80);

//バイナリ出力なのです。
$a_img = $a_image->getImageBlob();

//使い終わった$a_image、$b_imageはデストロイしましょう。エコのために!(?)
$a_image->destroy();
$b_image->destroy();

//ファイル生成
$fr = fopen("ファイル出力先場所/ファイル名.jpg","w");
fwrite($fr ,$a_img );
fclose($fr);

以上で終了です。
とりあえずImagickの画像合成ってこんな感じ〜みたいなコードでした。

はい、お待たせしました。画像を使った講義の時間です。
適当に作ったので白いギザギザはご愛嬌。


↑実際に使った画像。上を加工して使いました。下は背景の代わり。背景(jpg)→$a_image
加工すると↓こうなります。3つのパーツに分けてみた。

まずシエル君。(png)→$b_image

そしてセバスチャン(手なし)(png)→$c_image

セバスの手。(gif)→$d_image

そして上の通り(readImageとcompositeImageは画像枚数と合成回数分増えます。)に合成すると

こんな感じになります。

そしてセバスチャン(手なし)を合成する時に
$a_image->compositeImage ( $c_image , imagick::COMPOSITE_OVER , -43 , 0 );
セバスの手を合成する時に
$a_image->compositeImage ( $d_image , imagick::COMPOSITE_OVER , -35 , 0 );
とすると…

こんな感じでセバスチャンが寄って来た画像が合成できます!両方横向きだったらいい感じにくっつけるんですけどね…。