【问题标题】:Why do images saved to file differ in size from resources with imagejpeg()?为什么使用 imagejpeg() 保存到文件的图像与资源的大小不同?
【发布时间】:2017-11-18 06:00:41
【问题描述】:

我正在使用 PHP GD 库自动从图像生成缩略图。
然后我使用imagejpeg() 以95% 的质量将调整大小的图像保存到一个文件中。

当我使用echo file_get_contents($file) 输出这个文件时,与使用imagejpeg($resource_handle) 直接将调整大小的图像输出到浏览器相比,图像的文件大小总是大约2.5 - 4 倍。

Google PageSpeed 还告诉我图像可以压缩 75%,这证实了 1/4 的比例。

这可能是什么原因?

【问题讨论】:

  • 不确定这是否有意义。可以建议不要使用file_get_contents,因为readfile 会更可取且性能更高 - 直接输出缓冲区。
  • @ficuscr 这确实会提高服务器端的性能,但不会改变输出图像的大小。
  • 给我看。给我你所描述的证据。使用 5x5 像素的小图像。分享输出。什么构成了额外的位?持久化的文件可能没有被压缩吗?
  • 我想不出一种方法来“证明”我所描述的内容,但我发现它在大约 50 个不同的图像中是一致的。保存到文件的图像以 5% 的压缩率保存,而另一个则根本不压缩。在这两种情况下,我都使用 imagejpeg()。我想知道保存到文件而不是直接输出是否会影响 imagejpeg() 函数的文件大小。
  • @ficuscr 感谢您的帮助,我在函数的文档中找到了答案。

标签: php image image-processing compression gd


【解决方案1】:

“质量”设置在 JPEG 中是没有意义的术语。它只是一些编码器用来选择量化表的一种简化。一个编码器的 75 可以与另一个编码器的 75 完全不同。

要弄清楚这一点,您需要查看和比较

  1. 采样率;
  2. 量化表;和
  3. 霍夫曼表

用于两张图片。

【讨论】:

    【解决方案2】:

    我发现手册 (http://php.net/manual/en/function.imagejpeg.php) 提到默认(不传递质量参数)质量设置约为 75%。

    这解释了为什么直接输出图像而不将任何其他参数传递给 imagejpeg() 会导致图像比手动设置高于 75 的质量时更小。

    【讨论】:

      猜你喜欢
      • 2011-11-11
      • 2016-01-15
      • 1970-01-01
      • 2013-10-31
      • 1970-01-01
      • 1970-01-01
      • 2015-02-02
      • 1970-01-01
      • 2018-11-21
      相关资源
      最近更新 更多