我正在使用我编写的简单缩略图脚本,这很标准:
$imgbuffer = imagecreatetruecolor($thumbwidth, $thumbheight);
switch($type) {
case 1: $image = imagecreatefromgif($img); break;
case 2: $image = imagecreatefromjpeg($img); break;
case 3: $image = imagecreatefrompng($img); break;
case 6: $image = imagecreatefrombmp($img); break;
case 15: $image = imagecreatefromwbmp($img); break;
default: return log_error("Tried to create thumbnail from $img: not a valid image");
}
imagecopyresampled($imgbuffer, $image, 0, 0, 0, 0, $thumbwidth, $thumbheight, $width, $height);
$output = imagepng($imgbuffer, "$album/thumbs/$imgname.png", 9);
9是最低质量的设置,但是从400 x 600 JPEG图像(56kB)我得到一个27 kB的缩略图(140 x 140)。使用imagejpeg(质量为80)而不是imagepng,它大约是4kB。
这怎么可能,特别是在imagepng的最低质量设置?我尝试使用imagecopy而不是imagecopyresampled,并尝试使用imagecreate而不是真正的颜色版本。不幸的是,图像以某种方式出现了损坏。
有没有办法让PNG缩略图的文件大小合理(140 x 140时约为4 kB)?或者我必须使用JPEG吗?
答案 0 :(得分:8)
PNG是一种无损格式,对于通常以JPEG文件压缩的照片和其他复杂图像,不会产生良好的压缩率。
更糟糕的是,如果你要将JPEG文件转换为PNG,PNG还必须逐像素地重现由JPEG有损压缩引起的压缩伪像。
仅将PNG用于计算机图形和其他高度可压缩的图像,或者当您绝对不能丢失任何数据时(或者,正如Kris正确指出的那样,当您需要Alpha通道时)。