Почему изображение PNG с измененным размером намного больше исходного изображения?
Я совершенно сбит с толку, почему изображения в формате PNG, размер которых изменяется с помощью библиотеки GD, намного больше по размеру, чем оригинал.
Это код, который я использую для изменения размера изображения:
// 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;
}
Затем я сохраняю $ newImageToSave как blob в базе данных mysql.
Я пытался предотвратить альфа-канал и просто установить белый фон, без существенных изменений в размере файла. Я пытался установить "сжатие» параметры (от 0 до 9), но все же больше, чем оригинал.
пример
Я взял этообраз (1058px * 1296px) и изменил его размер до 900px * 1102px. Вот результаты:
Исходный файл: 328 КБ
PNG (0): 3,79 МБ
PNG (5): 564 КБ
PNG (9): 503 КБ
Любой совет, как получить уменьшенное изображение размером с файл, приветствуется.
-
PS: я думал, что это может быть битовая глубина, но, как вы можете видеть, пример изображения выше имеет 32 бита, тогда как изображение с измененным размером составляет 24 бита.