[php] GD関数で透明部分が黒くなる現象の解決方法

JPEG形式の画像では透明部分が存在しないため、透過部分や半透明部分があるPNG形式の画像を使用すると予期しない結果になることがあります。これにより、背景が塗りつぶされたり、背景との境界部分が汚くなったりすることがあります。

この問題を解決するためには、imagealphablending()とimagesavealpha()という関数を使用して、ブレンドモードとアルファチャネルの扱いを設定すると良いです。これにより、PNG形式の画像で透過部分や半透明部分を正しく表示することができます。

//元の画像
$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);

コメントを残す

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