PHP:imagepng正在创建非常大的文件

时间:2010-06-15 23:09:00

标签: php image png thumbnails jpeg

我正在使用我编写的简单缩略图脚本,这很标准:

$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 个答案:

答案 0 :(得分:8)

PNG是一种无损格式,对于通常以JPEG文件压缩的​​照片和其他复杂图像,不会产生良好的压缩率。

更糟糕的是,如果你要将JPEG文件转换为PNG,PNG还必须逐像素地重现由JPEG有损压缩引起的压缩伪像。

仅将PNG用于计算机图形和其他高度可压缩的图像,或者当您绝对不能丢失任何数据时(或者,正如Kris正确指出的那样,当您需要Alpha通道时)。