SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【php】GD関数でpng画像を加工したら透明部分が透明でなくなった!

問題

phpのGD関数でpng画像を加工したら、透明部分が真っ黒になってしまいました。

答え

jpegだと透明部分がないので気づかないが、PNG形式で透過部分、半透明部分があると思わぬ結果になることがある。

背景が塗りつぶされたり、背景(透明部分)との境界部分が汚くなったりする。

imagealphablending() と imagesavealpha() で、ブレンドモードとアルファチャネルの扱いを設定するとよい。

コード サンプル

//元の画像
$original = imagecreatefrompng('./sample.png');
$x = imagesx($original);
$y = imagesy($original);

//縮小先
$resize = imagecreatetruecolor($x/2, $y/2);
//ブレンドモードを無効にする
imagealphablending($resize, false);
//完全なアルファチャネル情報を保存するフラグをonにする
imagesavealpha($resize, true);

//半分に縮小
imagecopyresampled($resize, $original, 0, 0, 0, 0, $x/2, $y/2, $x, $y);

//画像ファイルとして出力
imagepng($resize, './resize.png');

//後片付け
imagedestroy($original);
imagedestroy($resize);

結果例

関連するメモ

コメント(1)

PHP GDで透過PNG画像を分割して、ひとつの画像に組み立てなおします。 | よみびとしらずのこんなところ 2015年1月12日 19:38

[…] 【php】GD関数でpng画像を加工したら透明部分が透明でなくなった! https://www.softel.co.jp/blogs/tech/archives/2680 […]