ここではPHPで画像を合成する方法について解説していきます。
サンプルソース
<?php // 画像作成 $dst_im = imagecreatetruecolor(200, 200); // 塗りつぶし $color = imagecolorallocate($dst_im, 'ffffff'); imagefill($dst_im, 0, 0, $color); // 合成する画像1枚目を取得 $src_im = imagecreatefrompng('img1.png'); // 画像に貼り付け imagecopy($dst_im, $src_im, 0, 0, 0, 0, 100, 100); imagedestroy($src_im); // 合成する画像2枚目を取得 $src_im = imagecreatefrompng('img2.png'); // 出力先の画像に貼り付け 横100、縦0の位置 imagecopy($dst_im, $src_im, 100, 0, 0, 0, 100, 100); imagedestroy($src_im); // 合成する画像3枚目を取得 $src_im = imagecreatefrompng('img3.png'); // 出力先の画像に貼り付け 横0、縦200の位置 imagecopy($dst_im, $src_im, 0, 200, 0, 0, 100, 100); imagedestroy($src_im); // ファイルの保存 imagepng($dst_im, 'output.png'); // メモリ開放 imagedestroy($dst_im);
解説
imagecreatetruecolor(200, 200); (4行目)
width200、height200で出力用に画像を用意します。
imagefill($dst_im, 0, 0, $color); (7行目)
画像の塗りつぶしです、ここでは白色で塗りつぶしています。
imagecreatefrompng(‘img1.png’); (9、14、19行目)
合成する画像を取得しています。
今回はpngで解説していますが、
jpegならimagecreatefromjpeg()
gifならimagecreatefromgif()とかもあります。
imagecopy(…) (11、16、21行目)
Manualより
imagecopy($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h);
dst_im
出力する画像リソース
src_im
コピーする画像リソース
dst_x
コピー先の x 座標(横)
dst_y
コピー先の y 座標(縦)
src_x
コピー元の x 座標(横)
src_y
コピー元の y 座標(縦)
src_w
コピー元の幅
src_h
コピー元の高さ
これで貼り付け位置をずらしながら画像を合成していきます。
imagepng($dst_im, ‘output.png’); (24行目)
png画像の保存をします。
jpegならimagejpeg()
gifならimagegif()などがあります。
imagedestroy($dst_im);
メモリの開放
たくさん画像を生成するとメモリリークに陥ってしまうので適度にコールしてください。