PHPでPNGやGIFの透過属性を維持したまま縮小する

class.image.phpを使って、画像を縮小していたんだけど、画像がPNGやGIFだった場合に透過属性が失われて背景が黒くなってしまう。


透過属性を維持したまま簡単にリサイズする方法を探して見つけたのがこれ。GDだけでOK。
Smart Image Resizing while Preserving Transparency With PHP and GD Library


アスペクト比を維持した拡大縮小も簡単にできるすぐれもの。
widthを縮小画像の横幅、heightを0に指定すると、アスペクト比を維持するようにheightを自動計算してくれる。


サンプル:$filenameを縮小して$newfilenameに保存
$filename="./images/samle.png";
$newfilename="./images/new_sample.png";
$image=smart_resize_image( $filename, 50, 50, false, 'return',false);
imagepng($image,$newfilename);


簡単な解説:
smart_resize_image( $file, $width = 0, $height = 0, $proportional = false, $output = 'file', $delete_original = true, $use_linux_commands = false )
$file
 加工する画像ファイル
$width
 変換後の横サイズ
$height
 変換後の縦サイズ
$proportional
 アスペクト比を維持するか。
$output
 fileだと元画像を上書き、returnだとGDオブジェクトを返す。
$delete_original
 元画像を削除するか
$use_linux_commands
 画像の削除にrmを使うか、@unlinkを使うか