せっかく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 );
とすると…
こんな感じでセバスチャンが寄って来た画像が合成できます!両方横向きだったらいい感じにくっつけるんですけどね…。