PHP 降低图像质量,直到文件大小达到 1mb

Kal*_*tel 2 php gd image

我正在处理我的一个项目,用户将在其中上传图像。上传的图像将使用灯箱显示。

问题是用户可能上传大小为 5mb 等的图像。因此,它需要大量加载时间。所以我想在保持尺寸不变的情况下降低图像质量。

我知道我们可以使用 imagejpeg() 函数,并传递质量为 90 的第三个参数,这也减少了文件大小。

我需要所有图像文件大小最大为 1mb,不能超过。

因此,我对应该将什么值作为质量传递感到困惑,以便获得最佳质量。

例如。如果上传的图像文件大小为 1.2mb,那么说我将通过 90 作为质量,这可能会将大小降低到小于 1mb,并且质量也是可以接受的。另一种情况,如果上传的文件大小是 5mb,而不是我通过 90 作为质量,那么文件大小可能不会小于 1mb。在这里,我需要传递较少的质量值(我猜)。

那么有什么方法可以帮助我确定应该通过的最佳质量参数。

非常感谢您的时间。

Hen*_*ker 5

不久前,我花了很长时间来处理同样的事情。首先,我发现 PNG 和 JPG 格式在猜测结果时非常笨拙。JPG 照片通常不能很好地转换为 PNG,但矢量 jpg 图像可以,矢量 png 通常不能很好地转换为 JPG,但照片可以。你会发现很难确保图像小于 1mb,特别是如果你不调整它们的大小。如果你不调整它们的大小,你也会遇到更多的麻烦——图像越大,质量会变得越来越低(有点讽刺)。

您需要每个图像的几个版本。让我解释。

  1. 您想保留原始图像,以便将来随时刷新基于原始图像的图像,例如,稍后提高图像质量甚至获得一些新尺寸。

  2. 使用带有灯箱的原始图像通常是一个坏主意。你最好调整它的大小以适应 1024 x 1024。这不仅能满足大多数人的需求,而且通常会给出一个合理的文件大小。然后,如果您愿意,您可以提供要下载的原件。当图像需要很长时间才能加载时,使用尽可能大的文件通常会导致访问者不满意,甚至可能会在一段时间后通过带宽使用使他们花费很多(出于同样的原因)。

我能想到的唯一方法是创建一些可怕的代码性能,循环遍历,逐渐降低质量并检查生成的图像大小。一旦找到低于 1mb 的图像大小,它就会循环并使用该质量设置。不过,我真的建议不要这样做。

PS 在这个答案的范围之外,我在评论中提到了我使用的解决方案的方法。