为什么保存到文件的图像与使用 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 完全不同。
要弄清楚这一点,您需要查看和比较
- 采样率;
- 量化表;和
- 霍夫曼表
在两张图片中使用。
我正在使用 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 完全不同。
要弄清楚这一点,您需要查看和比较
- 采样率;
- 量化表;和
- 霍夫曼表
在两张图片中使用。