【问题标题】:PHP: imagepng is creating inordinately large filesPHP:imagepng 正在创建异常大的文件
【发布时间】:2011-03-04 05:53:20
【问题描述】:

我正在使用我编写的一个简单的缩略图脚本,它非常标准:

$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)我得到的缩略图大小为 27kB (140 x 140)。使用 imagejpeg(质量为 80)而不是 imagepng 大约 4kB。

这怎么可能,尤其是在 imagepng 的最低质量设置下?我尝试使用 imagecopy 而不是 imagecopyresampled,并使用 imagecreate 而不是真彩色版本。不幸的是,图像以某种方式被破坏了。

有没有什么方法可以获得文件大小相当小的 PNG 缩略图(在 140 x 140 时大约 4 kB)?还是我必须使用 JPEG?

【问题讨论】:

  • 我不确定两者之间压缩方案的确切区别是什么,但它们显然不同。我会说,如果你想保持透明度,只使用 PNG,否则为什么不使用 JPEG?每个浏览器都支持它。在您的用例中,JPEG 有什么问题?
  • 没问题真的想起来了!当我第一次编写脚本时,出于某种原因,我使用了 imagepng,我只是坚持使用它。当我注意到尺寸问题时,我只是好奇是什么问题。

标签: php image png thumbnails jpeg


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢,这正是我所希望的答案——它为我澄清了一切。再次感谢。
  • @Artefacto:非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-11
  • 2019-10-26
  • 1970-01-01
  • 2016-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多