久々に PHP ネタ。 GD で png 画像を透過、リサイズしてみる。
function resize_image($org_path, $new_path, $to_width, $to_height) {
list($org_width , $org_height) = getimagesize($org_image_path);
$src_image = imagecreatefrompng($org_path);
$rate = 1;
if ($org_width > $org_height) {
$rate = $to_width / $org_width;
} elseif ($org_width < $org_height) {
$rate = $to_height / $org_height;
} else {
if ($to_width > $to_height) {
$rate = $to_height / $org_height;
} else {
$rate = $to_width / $org_width;
}
}
$to_width = $rate * $org_width;
$to_height = $rate * $org_height;
// 再サンプル
$new_image = imagecreatetruecolor($to_width, $to_height);
imagealphablending($new_image, false);
imagesavealpha($new_image, true);
imagecopyresampled($new_image, $src_image, 0, 0, 0, 0, $to_width, $to_height, $org_width, $org_height);
imagepng($new_image, $new_image_path);
imagedestroy($src_image);
imagedestroy($new_image);
}
png 透過の手順は、 (1) imagecreatetruecolor() で画像作成 (2) imagealphablending(), imagesavealpha() でアルファチャンネルの作成 (3) imagepng() で画像の書き出し
リサイズの手順は (1) getimagesize() で取得したサイズ配列から (2) 比率を計算(サンプルの計算はちょっとあやしいかも) (3) imagecopyresampled() でリサンプリング