PHP/GD2でのGIF/PNG画像の透過を保持したままのリサイズ
PHP/GD2で画像リサイズを行う際、透過の部分が黒くなってしまう。
http://mediumexposure.com/smart-image-resizing-while-preserving-transparency-php-and-gd-library/
https://github.com/maxim/smart_resize_image
にあるものを使えば透過も保持される。肝は以下の部分(githubにあるソースより抜粋)。
if ( ($info[2] == IMAGETYPE_GIF) || ($info[2] == IMAGETYPE_PNG) ) {
$transparency = imagecolortransparent($image);
if ($transparency >= 0) {
$transparent_color = imagecolorsforindex($image, $trnprt_indx);
$transparency = imagecolorallocate($image_resized, $trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue']);
imagefill($image_resized, 0, 0, $transparency);
imagecolortransparent($image_resized, $transparency);
}
elseif ($info[2] == IMAGETYPE_PNG) {
imagealphablending($image_resized, false);
$color = imagecolorallocatealpha($image_resized, 0, 0, 0, 127);
imagefill($image_resized, 0, 0, $color);
imagesavealpha($image_resized, true);
}
}
ただし、github上のissuesにもあるように、$trnprt_indxは$transparencyに、$trnprt_colorは$transparent_colorに変更する必要がある(最初のURLのソースをコピペして変数名を修正しきれていない感じ)。