2010-06-15 103 views
1

我用一个简单的缩略脚本,我写了,它是非常标准:PHP:imagepng是创建异常大文件

$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?

+1

我不确定两者之间压缩方案的确切区别是什么,但它们明显不同。如果你想保持透明度,我会说只使用PNG,否则为什么不使用JPEG?每个浏览器都支持它。在你的用例中JPEG有什么问题? – Kris 2010-06-15 23:14:35

+0

真的没有问题想到它!当我第一次写这个脚本时,出于某种原因使用了imagepng,我只是坚持下去。当我注意到尺寸问题时,我只是好奇这个问题是什么。 – Rafael 2010-06-24 22:12:14

回答

7

PNG是一种无损格式,并不会产生良好的压缩比的照片和其他复杂的图像,在JPEG文件通常被压缩。

更糟糕的是,如果你转换JPEG文件,PNG,巴布亚新几内亚也将重现像素对像素引起JPEG压缩的压缩失真。

使用PNG仅适用于计算机图形和高度压缩的其他图像,或当你绝对不能丢失任何数据(或者,如克里斯正确指出的,当你需要一个alpha通道)。

+0

谢谢,这只是我希望的答案 - 它为我澄清了一切。再次感谢。 – Rafael 2010-06-24 16:44:23

+0

@Artefacto:非常感谢。 – 2012-09-18 16:22:33