GDライブラリを使用してサイズ変更されたPNG画像のサイズが元のサイズよりはるかに大きいのはなぜか分かりません。サイズ変更されたPNGイメージが元のイメージよりもはるかに大きいのはなぜですか?
これは、私は画像のサイズを変更するために使用していたコードです:
// create image from posted file
$src = imagecreatefrompng($file['tmp_name']);
// get original size of uploaded image
list($width,$height) = getimagesize($file['tmp_name']);
if($width>$maxImgWidth) {
// resize the image to maxImgWidth, maintain the original aspect ratio
$newwidth = $maxImgWidth;
$newheight=($height/$width)*$newwidth;
$newImage=imagecreatetruecolor($newwidth,$newheight);
// fill transparent with white
/*$white=imagecolorallocate($newImage, 255, 255, 255);
imagefill($newImage, 0, 0, $white);*/
// the following is to keep PNG's alpha channels
// turn off transparency blending temporarily
imagealphablending($newImage, false);
// Fill the image with transparent color
$color = imagecolorallocatealpha($newImage,255,255,255,127);
imagefill($newImage, 0, 0, $color);
// restore transparency blending
imagesavealpha($newImage, true);
// do the image resizing by copying from the original into $newImage image
imagecopyresampled($newImage,$src,0,0,0,0,$newwidth,$newheight,$width,$height);
// write image to buffer and save in variable
ob_start(); // Stdout --> buffer
imagepng($newImage,NULL,5); // last parameter is compression 0-none 9-best (slow), see also http://www.php.net/manual/en/function.imagepng.php
$newImageToSave = ob_get_contents(); // store stdout in $newImageToSave
ob_end_clean(); // clear buffer
// remove images from php buffer
imagedestroy($src);
imagedestroy($newImage);
$resizedFlag = true;
}
それから私は、mysqlデータベースのBLOBとして$ newImageToSaveを保存します。
私はアルファチャンネルを防ぎ、白い背景を設定しましたが、ファイルサイズに大きな変化はありませんでした。私は "圧縮"パラメータ(0〜9)を設定しようとしましたが、元のサイズよりも大きくなりました。
例は、私が取ったこのimage(1058px * 1296px)と900px * 1102pxにそれをリサイズ。
オリジナルファイル:328キロバイト
PNG(0):3,79 MB
PNG(5):564キロバイト
PNG(9):503キロバイト
どれ先端これらは結果ですリサイズされた画像をファイルサイズを小さくする方法
-
PS:リサイズ画像は24ビットであるのに対し、私はそれはビット深度であると考えていたが、あなたが見ることができるように、例えば、画像は、上記の32ビットを有します。
あなたは圧縮率のために '5'を使用していることを。 '9'を試して、何が起こるか見てみましょう。 –
あなたの新しい次元の大きさが圧縮を効果的ではないものにしているのではないかと思います。異なるターゲット・ディメンションがどのファイル・サイズに圧縮されるかを知ることは興味深いでしょう。たとえば、ターゲットディメンションが元のサイズの半分の場合、新しいファイルサイズは何ですか。 –
@MarcB上記参照:PNG(9):503 KB –