[自分用メモ] GDを使ってPHPで画像を合成・縮小(伸長)・JPEG出力する

GDライブラリを使用した画像の合成は前回やったが、これを縮小(あるいは伸長)したり、合成前画像と違うフォーマット(ここではJPEG)で保存するなどの処理を試してみた。例によってサンプルコードなので実装時には適宜注意を要すること。
なお縮小と伸長は基本的に寸法を縮めるか伸ばすかだけの違いで同じ関数によって処理されるため、ここでは単に縮小として説明するが、伸長する場合は逆のことを考えればよい。

[php]
$png0 = imagecreatetruecolor($img_width, $img_height*3);
imagefill($png0, 0, 0, 0xffffff);

$png4 = imagecreatetruecolor($img_width/2, $img_height*3/2);
imagefill($png4, 0, 0, 0xffffff);

$png1 = imagecreatefrompng($parts_dir . "/" . $h . ".png"); // head
$png2 = imagecreatefrompng($parts_dir . "/" . $b . ".png"); // body
$png3 = imagecreatefrompng($parts_dir . "/" . $f . ".png"); // foot

if (!$png0 || !$png1 || !$png2 || !$png3 || !$png4)
exit;

imagecopy($png0, $png1, 0, $img_height*0, 0, 0, $img_width, $img_height);
imagecopy($png0, $png2, 0, $img_height*1, 0, 0, $img_width, $img_height);
imagecopy($png0, $png3, 0, $img_height*2, 0, 0, $img_width, $img_height);

imagecopyresampled($png4, $png0, 0, 0, 0, 0, $img_width/2, $img_height*3/2, $img_width, $img_height*3);
imagejpeg($png4, $cache_dir . "/" . $cache_name);

$img_url = $base_url . "/" . $cache_dir . "/" . $cache_name;

imagedestroy($png0);
imagedestroy($png1);
imagedestroy($png2);
imagedestroy($png3);
imagedestroy($png4);
[/php]


4、5行目は縮小用キャンバスとして用意している。合成後のオリジナル画像を縮小することになるので、画像の合成は前回の説明とまったく変わらない。
そして違うのは18行目と19行目。

18行目は縮小(伸長)するための関数。縮小用のリソースとオリジナルのリソースを指定して、それぞれの座標値と幅・高さを指定することで、コピー先のサイズに合わせた縮小(伸長)が行われる。ここでは元サイズの半分(2分の1)を指定しているので、50%縮小ということになる。伸長したい場合、たとえば2倍にしたいなどの場合は、ここのパラメータを指定すればいいだけである。

19行目はJPEG形式で保存する関数である。前回はimagepng関数だったが、これがimagejpeg関数に単純に置き換わっただけである。

Unityによる3Dゲーム開発入門 ―iPhone/Android/Webで実践ゲームプログラミングOpenGL ES 2.0 Androidグラフィックスプログラミングゲーム制作者になるための3Dグラフィックス技術 増補改訂版「WebGL/three.js」ではじめる3D‐CGプログラミング (I・O BOOKS)Halla 輸入 鶏もも肉 2kg 冷凍湘南貿易 デュック・ド・モンターニュ ノンアルコールワイン 750ml

[Sponsored Link]


コメントを残す

メールアドレスが公開されることはありません。