GD kitaplığı kullanılarak yeniden boyutlandırılan PNG görüntülerinin neden orijinalinden daha büyük boyutta olduğu konusunda kafam karıştı.PNG görüntüsünü neden orijinal görüntüden çok daha büyük boyutlandırılıyor?
// 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;
}
Sonra MySQL veritabanında blob $ newImageToSave kaydedin:
Bu
ben görüntüyü yeniden boyutlandırmak için kullanıyorum kodudur.Alfa kanalını engellemeye çalıştım ve beyaz arka planı ayarladım, dosya boyutunda önemli bir değişiklik olmadı. "Sıkıştırma" parametrelerini (0'dan 9'a) ayarlamayı denedim, ancak yine de orijinalden daha büyük.
Örnek aldı bu image (1058px * 1296px) ve 900px * 1102px için yeniden boyutlandırılır.
Orjinal Dosya: 328 KB
PNG (0): 3,79 MB
PNG (5): 564 KB
PNG (9): 503 KB
Herhangi ipucu Bu sonuçlar şunlardır Yeniden boyutlandırılan görüntünün dosya boyutunda küçültülmesi nasıl değerlendirilir.
-
PS: Ben bit derinliği olabilir, ama gördüğünüz gibi boyutlandırılan görüntü 24 bit ise, örneğin görüntü yukarıda, 32 bit vardır düşündük.
Sen sıkıştırma faktörü için 5' 'kullanıyoruz. 9'u dene ve ne olduğunu görün. –
Yeni boyutlu boyutunuzun sıkıştırmanın etkili olmamasına neden olan şey olup olmadığını merak ediyorum. Hangi dosya boyutuna farklı hedef boyutların sıkıştırılacağını görmek ilginç olurdu. Örneğin, hedef boyutlar orijinal boyutun yarısıysa, yeni dosya boyutu nedir? –
@MarcB Hemen yukarıya bakınız: PNG (9): 503 KB –