为什么保存到文件的图像与使用 imagejpeg() 的资源的大小不同?

Why do images saved to file differ in size from resources with imagejpeg()?

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

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

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

这可能是什么原因?

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

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

"quality" 设置在 JPEG 中是无意义的术语。它只是一些编码器对 select 量化表使用的简化。一个编码器的 75 可以与另一个编码器的 75 完全不同。

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

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

在两张图片中使用。