Почему изображение 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 бита.

Ответы на вопрос(1)

Ваш ответ на вопрос