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

nic*_*ckf 66 jpeg image-processing image-compression

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

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

我的问题:

  1. 给定一个任意的JPEG文件,是否可以判断质量等级是什么,以便在保存调整大小的图像时可以使用相同的质量?
  2. 这甚至不重要吗?无论原始质量如何,我是否应该将所有图像保存在合适的级别(例如:75-80)?

我对此并不十分肯定,因为我认为:(让我们举一个极端的例子),如果某人有500万像素的图像以质量0保存,它就会像任何东西一样块状.将图像尺寸缩小到640x480,可以平滑块状,几乎不那么明显......直到我再次将质量保存为0 ...

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

我甚至关闭了吗?

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

小智 103

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

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

identify -format '%Q' yourimage.jpg
Run Code Online (Sandbox Code Playgroud)

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

信息来源

  • @OranDennison您的评论含糊不清,足以让我在EXIF数据中查找"质量"标签.但是没有:"质量"是`识别-verbose`输出的一个特征. (4认同)
  • @basZero 因为尽管 **ImageMagick 返回质量评估数字,但这并不意味着它是正确的。** 请参阅 jpeg 创建者的 http://www.faqs.org/faqs/jpeg-faq/part1/section-5.html他们自己,以及https://photo.stackexchange.com/questions/88167/is-it-possible-to-find-out-what-c​​ompression-ratio-was-used-for-a-pspecial-jpeg (4认同)
  • 您在输出中查找的特定项目是Quality:项目,该项目显示在Properties:部分之前,包含所有EXIF数据.最高质量,此值为100. (2认同)
  • 我不明白为什么这个答案没有被标记为解决方案???它确实没有任何责备。 (2认同)

Ash*_*Ash 27

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

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

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

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

  • +1,一般来说,重新保存JPEG会降低质量,但在某些限制情况下,可以解决这个问题 - 请参阅http://en.wikipedia.org/wiki/Jpeg#Lossless_editing.例如,Irfanview有一个无损JPEG裁剪/旋转插件. (5认同)
  • 这个答案如何成为解决方案?它根本没有回答这个问题。 (4认同)

JAR*_*ans 11

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

$> identify -format '%Q' filename.jpg
   92%
Run Code Online (Sandbox Code Playgroud)

  • 哇,ImageMagick甚至可以为您提供RGB通道的峰度和偏度,以及是否交错!我一直都在使用`identity`,但是从不使用`-verbose`选项。很有用。 (3认同)

ton*_*4eg 8

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.在这种情况下,大图像和中图像将具有相同的尺寸和质量.


小智 6

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

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

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

因此,您可以使用这些来统计您的 jpg 上次保存的质量。如果你想将其降低到 65% 的质量,并且如果你想避免重新采样,你应该首先比较大小以确保它还没有太低,然后再降低质量

  • Raul,你是如何计算“1.7”系数的? (3认同)
  • 很高兴看到其他人一直在玩弄与我相同的想法。我试图计算出在我们的 CMS 中使用时,jpeg(或 png)图像的“合适”尺寸是多少。我已经对我们的数据库中已有的内容进行了一些统计,并且我也一直在玩弄一些数字。到目前为止,我将开始警告用户上传大于 4K 和 32x32 像素且具有区域:字节比<1。 (2认同)

ser*_*inc 6

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

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

identify -format '%f: %Q' *
Run Code Online (Sandbox Code Playgroud)

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