是否有可能告诉JPEG的质量水平?

这实际上是两个部分的问题,因为我不完全理解这些事情是如何工作的:

我的情况:我正在编写一个让用户上传图片的networking应用程序。 然后,我的应用程序调整为可显示的内容(例如:640×480-ish),并保存该文件供以后使用。

我的问题:

  1. 给定一个任意的JPEG文件,是否可以告诉质量等级是什么,以便保存resize的图像时可以使用相同的质量?
  2. 这是否甚至重要? 我应该把所有的图像保存在一个体面的水平(例如:75-80),不pipe原来的质量?

我不太确定,因为我认为:(让我们举一个极端的例子),如果某人有一个500万像素的图像保存在质量为0,那么它会像任何东西一样块。 减less图像尺寸为640×480,块状物将被平滑, 几乎没有那么明显…直到我再次用质量0保存它…

另一方面,如果q = 0的图像是800×600,调整到640×480并不会改变它看起来像是完全废话的事实,所以用q = 80来保存将是多余的。

我甚至closures?

我在PHP上使用GD2库,如果这是任何使用

  1. JPEG是一种有损格式。 每次保存JPEG图像时,无论质量如何,都会降低实际的图像质量。 因此,即使从文件中获得了质量级别,再次保存JPEG(即使质量= 100)也无法保持相同的质量。

  2. 您应该尽可能保存您的JPEG文件的大小。 或者使用诸如PNG之类的无损格式。

低质量的JPEG文件不会变得更加块。 而是减less颜色深度,并删除图像部分的细节。 你不能依靠低质量的图像是块状的,看起来好小尺寸。

根据JFIF规范。 虽然存储了水平和垂直像素密度,但图像的质量数(0-100)未保存在图像标题中。

您可以通过ImageMagick查看压缩级别。 下载和安装说明可以在官方网站上find。

安装完成后,从命令行运行以下命令:

identify -format '%Q' yourimage.jpg 

你应该从0(低质量,小文件大小)到100(高质量,大文件大小)的值。

信息来源

Jpeg压缩algorithm有一些参数影响结果图像的质量。

其中一个参数是定义在每个系数上将使用多less位的量化表。 不同的程序使用不同的量化表。

一些程序允许用户设置质量等级0-100。 但是这个数字没有共同的定义。 使用60%质量的Photoshop制作的图像需要46 KB,而使用GIMP制作的图像只需要26 KB。

量化表也不同。

还有其他的参数,例如subsampling,dct方法等等。

所以你不能用单个质量等级号来描述它们,你不能用单一的数字比较JPEG图像的质量。 但是,你可以创build像photoshop或gimp这样的数字,这将描述质量尺寸之间的妥协。

更多信息: http : //patrakov.blogspot.com/2008/12/jpeg-quality-is-meaningless-number.html

通常的做法是将图像调整为合适的大小,然后应用jpeg。 在这种情况下,巨大和中等的图像将具有相同的尺寸和质量。

对于未来的访问者,检查一个给定的jpeg的质量,你可以使用imagemagick工具:

 $> identify -format '%Q' filename.jpg 92% 

所以,你基本上有两种情况:

  1. 如果传入图像的质量设置得太高,可能会占用不适当的空间。 因此,例如,您可能希望将传入的q = 99减less到q = 85。

  2. 如果传入图像的质量设置得太低,则可能会浪费空间来提高质量。 除了丢弃大量数据的图像在质量提高时不会奇迹般地占用更多空间 – 即使在高质量设置下,块图像也会很好地压缩。 所以,在我看来,把q = 1加到q = 85是完全可以的。

从这个angular度来看,我认为只是强迫一个体面的质量设置是一个完全可以接受的事情。

每次新的文件保存将进一步降低整体质量,通过使用更高的质量值,您将保留更多的图像。 不pipe原始图像质量如何。

由于已经有两个使用identify答案,下面是一个也输出文件名(一次扫描多个文件)的答案:

如果你希望有一个简单的输出filename: quality在多个图像上使用,你可以使用

 identify -format '%f: %Q' * 

显示当前目录中所有文件的文件名+压缩 。

如果您使用原来创build的相同软件重新保存JPEG,使用相同的设置,您会发现损害被最小化 – algorithm会倾向于抛出第一次抛出的相同信息。 我不认为有什么方法可以通过查看文件来知道select什么级别; 即使可以,不同的软件几乎可以保证不同的参数和舍入,使得匹配几乎不可能。

这可能是一个愚蠢的问题,但为什么你会关心微观pipe理文件的质量? 我相信,如果您使用ImageMagick来进行转换,它将为您pipe理JPEG的质量,以达到最佳效果。 http://www.php.net/manual/en/intro.imagick.php

以下是我发现运作良好的公式:

  1. jpg100size(大小不应超过98-100%质量的字节)= width * height / 1.7

  2. jpgxsize = jpg100size * x(x =百分比,例如0.65)

所以,你可以用这些来统计你的jpg上次保存的质量。 如果你想把它降低到65%的质量,如果你想避免重新取样,你应该比较大小,以确保它不是已经太低,只有降低质量