PHP 画像合成

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください