代码之家  ›  专栏  ›  技术社区  ›  nickf

能说出jpeg的质量等级吗?

  •  57
  • nickf  · 技术社区  · 15 年前

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

    我的情况:我正在写一个允许用户上传图片的web应用。然后,我的应用程序将大小调整为可显示的内容(例如:640x480 ish),并保存文件供以后使用。

    我的问题:

    1. 给定一个任意的jpeg文件,是否可以判断质量级别,以便在保存调整大小的图像时使用相同的质量?
    2. 这有关系吗??我是否应该将所有图像保存在适当的级别(例如:75-80),而不管原始质量如何?

    我不太确定这一点,因为,正如我所想的那样:(举个极端的例子),如果有人将500万像素的图像保存为0质量,那么它会像任何东西一样阻塞。将图像大小减小到640x480,将平滑块度并 仅仅 不那么引人注目…直到我再次以质量0保存它…

    在光谱的另一端,如果有一个图像是800x600,Q=0,调整到640x480并不能改变它看起来完全是废话的事实,所以用Q=80保存是多余的。

    我离你很近吗?

    如果有用的话,我在php上使用gd2库

    10 回复  |  直到 7 年前
        1
  •  23
  •   Community CDub    7 年前
    1. jpeg是一种有损的格式。每次保存相同的jpeg图像时,无论质量级别如何,都会降低实际图像质量。因此,即使您确实从文件中获得了质量级别,当您再次保存JPEG时(即使在质量=100时),也无法保持相同的质量。

    2. 就文件大小而言,您应该以尽可能高的质量保存JPEG。或者使用无损耗格式,如png。

    低质量的jpeg文件不会变得更加阻塞。取而代之的是降低颜色深度,去除图像部分的细节。你不能指望低质量的图像是块状的,在较小的尺寸上看起来还可以。

    根据 JFIF spec. 质量编号(0-100)不存储在图像标题中,尽管存储了水平和垂直像素密度。

        2
  •  84
  •   Joe Lencioni    9 年前

    您可以通过imagemagick查看压缩级别。下载和安装说明可在 official website .

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

    identify -format '%Q' yourimage.jpg
    

    您应该得到从0(低质量、小文件大小)到100(高质量、大文件大小)的值。

    Information source

        3
  •  10
  •   Joe Lencioni    9 年前

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

    $> identify -format '%Q' filename.jpg
       92%
    
        4
  •  8
  •   ton4eg    15 年前

    jpeg压缩算法中的一些参数对结果图像的质量有影响。

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

    有些程序允许用户将质量级别设置为0-100。但对这个数字没有共同的辩护。用60%质量的photoshop制作的图像需要46kb,而用gimp制作的图像只需要26kb。

    量化表也不同。

    还有其他参数,如子采样、dct方法等。

    因此,不能用一个质量级别数字来描述所有这些图像,也不能用一个数字来比较jpeg图像的质量。但是你可以创建像photoshop或gimp这样的数字来描述大小和质量之间的折衷。

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

    通常的做法是将图像调整到适当的大小,然后应用jpeg。在这种情况下,大图像和中间图像将具有相同的大小和质量。

        5
  •  4
  •   serv-inc    8 年前

    因为已经有两个答案 identify ,这里有一个 还输出文件名(用于一次扫描多个文件) :

    如果您希望有一个简单的输出 filename: quality 对于多个图像,可以使用

    identify -format '%f: %Q' *
    

    show the filename + compression 当前目录中的所有文件。

        6
  •  3
  •   Eric Seppanen    15 年前

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

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

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

    从这一点来看,我认为简单地强制一个像样的质量设置是完全可以接受的。

        7
  •  3
  •   Raul Popa    10 年前

    以下是我发现效果很好的一个公式:

    1. jpg100大小(对于98-100%质量,它不应超过字节的大小)=宽度*高度/1.7

    2. jpgxsize=jpg100大小*x(x=百分比,例如0.65)

    因此,您可以使用这些数据来统计您的jpg上次保存的质量。如果你想把它降低到65%的质量,如果你想避免重采样,你应该先比较一下大小,以确保它不是太低,然后再降低质量

        8
  •  2
  •   Alexander Taran    15 年前

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

        9
  •  1
  •   Mark Ransom    15 年前

    如果使用最初创建JPEG的相同软件,使用相同的设置,重新保存JPEG,您将发现损坏最小化-算法将倾向于抛出与第一次抛出的信息相同的信息。我不认为仅仅通过查看文件就可以知道选择了什么级别;即使可以,不同的软件几乎可以保证不同的参数和舍入,使得匹配几乎不可能。

        10
  •  1
  •   bryanjonker    15 年前

    这可能是一个愚蠢的问题,但是为什么你会担心文档质量的微观管理呢?我相信如果你使用imagemagick来进行转换,它会为你管理jpeg的质量以获得最佳效果。 http://www.php.net/manual/en/intro.imagick.php