脱力系備忘録BloG ホーム »透過指定のあるPNGをimagejpegで出力すると黒く塗りつぶされる

透過指定のあるPNGをimagejpegで出力すると黒く塗りつぶされる  

256色以下のパレットカラーの場合のPNG画像に透過指定がある場合、サイズ変更しない場合はなにも考えず、

$im = imagecreatefrompng('256色透過.png');
header('Content-type: image/jpeg');
imagejpeg($im, NULL, 70);

で問題なく出力されます。

しかし、リサイズする場合はちょっと工夫しないとJPEG出力したときに透過部分が黒くなってしまいます。
特に、透過指定のあるフルカラーPNGの場合は、リサイズしなくても黒く塗りつぶされてしまいます。

試行錯誤した結果、透過部分を指定した色で塗りつぶすという方法で解決とする。


$imIn = imagecreatefrompng('透過指定のある.png');

$x = imagesx($imIn);
$y = imagesy($imIn);

$imOut = imagecreatetruecolor($x,$y);

#背景を白にする場合
imagefill($imOut, 0, 0, imagecolorallocate($imOut, 255, 255, 255));

imagecopyresampled($imOut,$imIn,0,0,0,0,$x,$y,$x,$y);

header('Content-type: image/jpeg');
imagejpeg($imOut, NULL, 70);


これで透過部分に任意の色がついた状態でJPEG出力されます。
関連記事

category: PHP

この記事へのコメント

コメントの投稿

非公開コメント

コメントは全て管理人が内容を確認してから表示されます(非公開コメント除く)。
内容によっては表示されない場合がありますことご了承願います。

プロフィール

お問い合わせ

最新記事

最新コメント

▲ Pagetop