2012-02-17 94 views
6

通常情况下,当图像进入我的网站时,我使用默认质量为80%的图像库将其保存为jpg格式。现在,当我需要对其进行一些其他操作时(比如剪切它,甚至只是调整大小),图像将以jpg格式打开,处理并保存。但是,如果在我不想再次压缩之前压缩它,或者每次需要执行操作时质量都会下降。检测JPG压缩率?

有没有一种方法可以使用标准GD php库中的工具检测图像已经被压缩了多少(与我猜想的png版本相比)?我知道,通过比较相对压缩量来检测图像被Photoshopped的位置的工具是如此,所以我认为可以检测到压缩量,但是有人知道我会如何去做这种计算吗?谢谢。

+0

对于我所知道的,你不能从jpg文件中获得质量率 – 2012-02-17 21:59:10

+1

我知道它不是保存在文件本身的元数据中,但可能有一些计算方法 – hackartist 2012-02-17 22:00:03

+0

不可以。 .. – 2012-02-17 22:06:43

回答

8

您无法从JPG中获得质量值。此外,质量值与编码器有关。这不是一个标准或类似的东西。有些程序只有(低,中,高),大约20可能比90好。

其次,即使每次将其保存为最佳质量,JPG也会在每个辅助编码中丢失质量。生活的悲哀真理:)唯一不影响质量的操作是翻转和旋转(如果它们与JPEG块大小对齐,则为作物)。

拇指规则:每次以相同的质量值编码它示例:如果您将它保存一次,比如说60,那么如果您下次将它保存为80则没有收益。只是更大的文件大小。

此外,如果您有足够的存储空间,请尝试减少此类重新编码的次数并对原始文件执行每次操作。

+0

已更新的答案。 – 2012-02-17 22:17:28

1

您必须将图像的质量存储在数据库中,以便知道它是否已被压缩。

+0

即使他调整图像大小,质量也会下降。保存是没有意义的。 但是,好的想法,因此有一个+1。 – 2012-02-17 22:08:58

+0

@RokKralj我建议保存,以便他不会压缩一次以上。他可能会恶化图像更多.. – ppp 2012-02-17 22:10:27

+0

你不明白一切。没有“压缩”,它只是保存在质量价值。如果你的意思是他在80岁时保存一次,那么请记住,那么他可以在下一次保存为100 ...?这只会增加文件大小,而不会提高质量。 80 - > 80 - > 80是正确的保存。 – 2012-02-17 22:13:53

1

为避免多次压缩图像,您可以简单地将调整大小的文件大小与原始大小进行比较。

  • 如果文件大小明显较大,那么您已经提高了速度,所以不要使用它。
  • 如果它明显低于压缩的,请使用它。

此外,由于重新压缩文件的速度相同,如果您使用整数(60%,70%,80%等),您只能确定文件大小的一小部分调整大小的文件大小与原始文件的大小非常相似。

例如,压缩1,844 KB文件在:
- 90% = 2,115 KB。尺寸增加了,所以我不会使用它。
- 80% = 1,843 KB。这几乎等同于原始的文件大小,所以我可以假设原来有一个80%率。
- 70% = 1,567 KB。这已经压缩了,所以我会使用它。

最后,如果你只关心你已经压缩的图像自己的速度,那么你可以使用PHP来保存你的文件的元数据使用的速率。