PHP GDを使って画像を連結、合成し生成する
最近のバージョンのPHPにはデフォルトでGDというモジュールが入っており、それを使って画像の縮小、生成、連結、合成等の事が行えます。今回はデフォルトで入っているGDを使って、複数の画像を連結して一枚の画像にする方法を行っています。
PHPのGDは、画像の合成や連結、生成にはまずベースとなる土台、画像編集ソフトで言うカンバスを作成する必要があります。その後に、そのカンバス上に座標で取り込んだ画像を指定して配置していくことになります。カンバスの上に画像をぺたぺたと貼りあわせていくようなものとイメージすると何をやっているのか理解しやすいかと思います。
PHP GDを使って連結画像を作る
土台となるカンバスにあたるものを作成する、数値はピクセル単位となっている。
$width = 1920; $height = 1080; $create_image = imagecreatetruecolor($width,$height);
画像ファイルから連結、合成等につかう画像を読み込み 変数に格納する
$get_image = imagecreatefromjpeg('002.jpeg');
画像は外部にあるファイルをURLで指定する事も可能です。
取り込んが画像をカンバスにあたる土台に配置する。
$position_x = 0; $position_y = 0; imagecopy($create_image, $get_image, $position_x, $position_y, 0, 0, 200, 200);
position_x と positon_y で指定しているのは、カンバスを起点とした位置の指定で、左上が起点となっており、両方共 0・ゼロ を指定する事で左上の角からの開始となる。imagecopyの後半の0はget_imageの画像の位置の指定である。例えば、100×100の画像があったとする、そのときに 50,50 と指定すると左から50、上から50のところからの画像が切り抜かれて使われる。後半の200のところは画像の横と縦のサイズを表している。あとはimagecopyを繰り返すことで、画像の連結と敷き詰めが出来る。
画像の連結には予め、元の画像サイズ等を計算して創りだす画像のサイズを決める必要があります。
画像を出力する
imagepng( $create_image, 'img/merged.png'); //PNG画像で保存する場合 imagejpeg( $create_image, 'img/merged.jpg'); //jpg画像で保存する場合 imagegif( $create_image, 'img/merged.gif'); //gif画像で保存する場合 //最後にメモリを開放する imagedestroy($create_image);
創りだした画像をファイルとして保存します、jpg、png、gif等で保存する事が出来ます。それぞれで 作成した画像、$create_image と 保存先のパスを指定します。そして最後に $create_image を開放します。画像にはメモリを多く使うので処理が終わったらメモリを開放しましょう。
これで一応基本的な画像の作成が行えます。画像を生成して、ファイルに保存せずにHTMLでインライン表示させる事も出来ます。
base64 で画像を表示する
ob_start(); imagejpeg( $create_image, NULL); imagedestroy( $create_image ); $img2 = ob_get_clean(); echo "<img src='data:image/jpeg;base64,".base64_encode( $img2 )."'>";
画像生成系のサービスを行っている場合は、画像をそのままHTMLに表示させて右クリックから保存してもらうなど、そういった使い方に便利です。
画像の敷き詰めや連結には X座標とY座標を徐々にずらして行くように while や for を2重にする事で敷き詰めができます。今回の目的としては画像の連結や合成が主体でしたが。カンバスサイズを小さくすれば、中心からのトリミング、上部からのトリミングなど 自動でサムネイルの生成等も数値等を変えてやるだけで作れます。
COMMENT