Dlaczego rozmiar obrazu PNG jest o wiele większy niż oryginalny obraz?

Jestem dość zdezorientowany, dlaczego obrazy PNG, które zmieniają rozmiar za pomocą biblioteki GD, są znacznie większe niż oryginał.

To jest kod, którego używam do zmiany rozmiaru obrazu:

// 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;
}

Następnie zapisuję $ newImageToSave jako blob w bazie danych mysql.

Próbowałem zapobiec kanałowi alfa i po prostu ustawić białe tło, bez znaczącej zmiany rozmiaru pliku. Próbowałem ustawić parametry „kompresji” (od 0 do 9), ale nadal większe niż oryginał.

Przykład
Wziąłem toobraz (1058px * 1296px) i zmieniono jego rozmiar na 900px * 1102px. Oto wyniki:

Oryginalny plik: 328 KB
PNG (0): 3,79 MB
PNG (5): 564 KB
PNG (9): 503 KB

Doceniana jest każda wskazówka, jak zmniejszyć rozmiar obrazu o zmienionym rozmiarze.

-

PS: Myślałem, że może to być głębia bitowa, ale jak widać, przykładowy obraz powyżej ma 32 bity, podczas gdy obraz o zmienionym rozmiarze ma 24 bity.

questionAnswers(1)

yourAnswerToTheQuestion