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

时间:2012-10-26 10:25:07

标签: php image gd

我正在处理用户上传图片的项目之一。上传的图像将使用灯箱显示。

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

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

我需要将所有图像文件大小设置为最大1mb,而不是更多。

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

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

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

非常感谢你的时间。

1 个答案:

答案 0 :(得分:2)

一段时间以来,我花了很多时间搞这种同样的事情。首先,我发现PNG和JPG格式在猜测结果时非常尴尬。 JPG照片通常不会很好地转换为PNG,但是矢量jpg图像会,矢量png通常不能很好地转换为JPG,但照片会。你会发现很难确保图像不到1mb,特别是如果你没有调整它们的大小。如果你没有调整它们的大小,你也会遇到更多麻烦 - 质量会越来越差,形象越大(具有讽刺意味)。

每张图片都需要几个版本。让我解释一下。

  1. 你想保留原版,所以你可以在将来的任何时候根据原版刷新图像,让我们说,以后提高图像的质量,甚至可以获得一些新的尺寸。

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

  3. 我能想到做你要问的唯一方法是创建一些可怕的代码性能,这种代码性能可以循环,逐渐降低质量并检查生成的图像大小。一旦发现图像大小低于1mb,它就会出现循环并使用该质量设置。我会建议不要这样做。

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