2

我正在开发我的一个项目,用户将上传图片。上传的图像将使用灯箱显示。

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

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

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

所以,我很困惑应该通过什么值作为质量,以便获得最佳质量。

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

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

非常感谢您的时间。

4

1 回答 1

5

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

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

  1. 您想保留原始图像,因此您可以在以后的任何时间根据原始图像刷新图像,以便稍后提高图像质量甚至获得一些新的尺寸。

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

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

P.S. Outside the scope of this answer i have mentioned in the comments the methodology of a solution i used.

于 2012-10-26T11:07:17.173 回答