【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);
結果例
PHP GDで透過PNG画像を分割して、ひとつの画像に組み立てなおします。 | よみびとしらずのこんなところ 2015年1月12日 19:38
[…] 【php】GD関数でpng画像を加工したら透明部分が透明でなくなった! https://www.softel.co.jp/blogs/tech/archives/2680 […]