ここでは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);
メモリの開放
たくさん画像を生成するとメモリリークに陥ってしまうので適度にコールしてください。
