首页 文章

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

提问于
浏览
54

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

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

我的问题:

  • 给定一个任意的JPEG文件,是否可以判断质量等级是什么,以便在保存调整大小的图像时可以使用相同的质量?

  • 这甚至不重要吗?无论原始质量如何,我是否应该将所有图像保存在合适的级别(例如:75-80)?

我举了一个极端的例子,如果某人有500万像素的图像保存在质量0,它就会像任何东西一样块状 . 将图像尺寸缩小到640x480,可以平滑块状,几乎不那么明显......直到我再次将质量保存为0 ...

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

我甚至关闭了吗?

我在PHP上使用GD2库,如果有任何用处的话

10 回答

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

    • 您应该以尽可能高的质量保存JPEG文件大小 . 或使用无损格式,如PNG .

    低质量的JPEG文件不会变得更加块状 . 而是减少颜色深度并移除图像部分的细节 . 您不能依赖较低质量的图像,并且在较小的尺寸下看起来不错 .

    根据JFIF spec.,尽管存储了水平和垂直像素密度,但质量数(0-100)未存储在图像 Headers 中 .

  • 3

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

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

    identify -format '%Q' yourimage.jpg
    

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

    Information source

  • 82

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

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

    Jpeg压缩算法具有一些影响结果图像质量的参数 .

    这些参数之一是量化表,其定义将在每个系数上使用多少位 . 不同的程序使用不同的quatization表 .

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

    量化表也不同 .

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

    因此,您无法通过单个质量级别编号来描述所有这些,并且您无法通过单个数字来比较jpeg图像的质量 . 但你可以创建像photoshop或gimp这样的数字来描述尺寸与质量之间的差异 .

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

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

  • 3

    所以,基本上有两种你关心的案例:

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

    • 如果传入的图像质量设置太低,可能会浪费空间来提高质量 . 除了丢弃大量数据的图像在质量提升时不会神奇地占用更多空间 - 即使在高质量设置下,块状图像也会非常好地压缩 . 因此,在我看来,将输入q = 1提高到q = 85是完全可以的 .

    从这一点来看,我认为仅仅强制一个体面的质量设置是完全可以接受的事情 .

  • 8

    这是一个我发现运作良好的公式:

    • jpg100size(98-100%质量不应超过字节数)=宽*高/ 1.7

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

    所以,你可以用这些来统计你的jpg的质量保存在 . 如果你想让它降低,让我们说65%的质量,如果你想避免重新取样,你应该首先比较尺寸,以确保它不是太低,然后才降低质量

  • 1

    由于使用 identify 已有两个答案,这里有一个 also outputs the file name (for scanning multiple files at once)

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

    identify -format '%f: %Q' *
    

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

  • 2

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

  • 1

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

  • 3

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

相关问题