2013年2月13日水曜日

PNGの透過を維持したままGIFに変換

PHPマニュアル通りにPNGからGIFを生成すると透過せずに黒く塗りつぶされる。
透過を指定しろと書いてるが、何指定したらいいかわからなかった。
透過を維持したまま画像を縮小させる関数(smart_resize_image)を作った人がいて、
このソースを見て参考にしたらできた。


header('Content-Type: image/gif');

$image = imagecreatefrompng($_GET['imgUrl']);

// Create a new transparent color for image
$color = imagecolorallocatealpha($image, 0, 0, 0, 127);

// Completely fill the background of the new image with allocated color.
imagecolortransparent($image, $color);

imagegif($image);
imagedestroy($image);


pngの透過で指定されている値をそのままGIF生成前に教えてあげればいいだけ。α値を忘れずに指定しよう。PHPマニュアルにはないから困ったほんと。
このスクリプトはGETパラメータとして受け取ったPNG画像のURLをそのままGIF画像として出力しているだけ。
ちなみにPOSTでパラメータ送ると、I.E.、FireFoxで画像を保存をできない。両者は画像保存時にもう一回、URLを参照して画像を取りに行くから。もう一度POSTデータを送信してくれてるわけじゃないらしいから、画像を作れず壊れます。GETでURLをユニークしちゃえば何度でも生成できる。