JpegQuality: Show some parameters about JPEG compression quality.

作者:马健
邮箱:stronghorse_mj@hotmail.com
主页:老马的原创空间

FAQ
使用说明
    一、软件安装/删除
    二、软件使用
附录 版本更新记录

FAQ

Q:JpegQuality是什么?
A: 顾名思义,这是一个用来查看、比较JPEG文件中与质量相关的那些压缩参数的软件。典型参数包括由量化表反推出来的压缩质量系数、颜色采样(缩水)比例等。这些系数对JPEG文件长度与质量的影响可以参阅JPEGsnoop的作者Calvin Hass写的系列文章,以下是其中关键的几篇:
JPEG Compression, Quality and File Size
JPEG Color Space Conversion Error
JPEG Chroma Subsampling
JPEG Compression Quality from Quantization Tables
JPEG Huffman Coding Tutorial
What is an Optimized JPEG?
如果看不懂英文,也可以去看看我写的《ComicEnhancerPro 系列教程》中的《教程十八:JPG文件长度与质量》。

Q:JpegQuality与JPEGsnoop是什么关系?
A:在功能上JpegQuality参考了JPEGsnoop,但输出更简洁一点。不过JPEGsnoop是完全自己写的JPEG解码,其源代码看得我晕头转向,JpegQuality没那么复杂,完全是基于Independent JPEG Group(IJG,独立JPEG小组)的源代码实现JPEG参数读取。另外从量化表反推压缩时的质量系数、方差的算法是学JPEGsnoop的,而JPEGsnoop又是从IJG源代码反推出来的。

Q:查看JPEG压缩参数有什么用?
A:JPEGsnoop的作者Calvin Hass认为每一种JPEG压缩软件或固件所使用的量化表、颜色采样比例都是不同的,做成MD5后就可以当作“指纹”反推生成JPEG文件所使用的软件或固件(甚至版本号)、压缩时所选择的质量系数等,因此随便百度一下JPEGsnoop就可以看到大把用它来识别照片是否被P过的教程。但我更看重的是以下几点应用:

  1. 通过反推压缩时所使用的质量系数,可以看出生成JPEG的人是如何心狠手辣的。以PDG文件为例,总有人在网上四处嚷嚷说JPG格式的PDG文件用CEP处理后文件长度变大很多,其实原因就在于CEP中的缺省JPG质量系数是按照正常人的思维习惯设置的,而PDG的质量系数已经超越了正常人的思考范围。但如果没有量化的数据做支撑,也很难和那些小白们说清楚这件事。
  2. 通过比较不同软件、固件的压缩参数,可以大致推测不同厂家在JPEG压缩上的态度,大致推测其所生成的JPEG文件在文件长度和质量方面的差异,算是给产品选择提供一个参考。
  3. 提供查看不同软件对量化表的设置,可以了解其偏好,知道在使用软件时该如何选择参数。
  4. 通过这个软件的实现,我可以掌握从原JPEG文件中读取原始压缩系数,再重复用于此JPEG文件转存时的压缩过程的技术,保证转存出来的JPEG文件与原始JPEG文件的长度、质量变化不大。这种技术在我的软件中的具体应用参见《ComicEnhancerPro 系列教程》中的《教程十八:JPG文件长度与质量》。

Q:JpegQuality显示的参数是否能反映出JPG文件的修改历史?
A:不能。因为JPG文件中根本就没有存储历史信息,所以JpegQuality显示的都是最后一次存储JPG时所用的压缩参数。举一个极端例子,如果某个用很低的质量系数压缩的JPG文件,比如说从CX的PDG文件解码出来的JPG文件,用CEP或其它图像处理软件进行处理后又用很高的质量系数转存为JPG文件,则JpegQuality打开转存后的JPG文件显示的就是最后一次转存时所使用的较高的质量系数。

Q:JpegQuality收费吗?
A:JpegQuality是一个“友情软件”(Friendware),用户在承诺不用于商业目的,也不对文件及其附件进行任何更改的条件下,不需要为使用该软件负任何费用,最多是在某个讨论区看到我发帖子灌水时(我的ID一般是strnghrs),进去捧个人场,作为友情回报;或者在年节时发个email问声好(所以叫“友情软件”)。我承诺绝不在程序中暗藏任何商业广告、木马,但不承诺为使用JpegQuality的后果承担任何责任。如果您需要将它用于商业目的,或加入您的网站,请与我联系,否则保留追究一切责任的权利。

使用说明

一、软件安装/删除

本软件安装非常简单:创建一个目录,将下载下来的ZIP包解压到该目录即可。

本软件的删除也很简单:直接删除从ZIP包中解压缩出来的所有文件即可。

ZIP包中包括下列文件:

  1. JpegQuality.exe。这是软件的主程序。
  2. JpegQuality.htm。本帮助文件。

如果您下载到的ZIP包中还包括其它文件,毫无疑问不是我放进去的,有广告之嫌疑,请立即删除。

二、软件使用

软件的使用比较简单,将需要显示压缩参数的JPEG文件拖拽过来,或点击“选择源文件”按钮选择JPEG文件,即可显示。点击“查看源文件”按钮可以用缺省图像浏览器打开此JPG文件。

如果把JpegQuality.exe与ComicEnhancerPro.exe放在同一个文件夹下,还可以从CEP中启动本软件,查看CEP当前正在处理的JPG文件的参数。

JpegQuality界面上“基本信息”中所显示参数的解释:

参数 说明
像素宽度 所选源文件的宽度,以像素为单位。
像素高度 所选源文件的高度,以像素为单位。
色彩空间 源文件的色彩空间。通常RGB色彩空间的图像转成JPG后就会变成YCrCb色彩空间,而CMYK的变成YCCK,灰度的则仍然保持灰度。转换的目的参见《教程十八:JPG文件长度与质量》,其实简单一句话就是:通过色彩空间转换,把肉眼敏感的明暗信息与肉眼不敏感的色彩信息分开,就可以通过对颜色信息进行子采样(缩水)来减小文件长度,详见下面对“采样”参数的解释。
通道数 与色彩空间对应,YCrCb、YCCK、灰度的通道数分别是3、4、1。
采样 彩色图像对颜色的子采样(sub-sample,可以意译为“缩水”)系数。此系数对彩色图像的质量影响甚大。以3通道图像为例,质量最好的是1x1 1x1 1x1,即在任何一个通道上都没有缩水;质量次之的是1x1 2x1 2x1,即在色彩通道上单方向缩水了一半;质量最惨的是1x1 2x2 2x2,即在颜色通道上沿纵、横方向各缩水一半,实际颜色信息只剩下原来的1/4。当然缩水后虽然质量变差,但缩得越多,文件长度越小。
数据精度 JPEG文件中的数据精度,通常是8位,某些高精度的可以到16位,不过在常规24位/32位真彩显示器上我不相信有谁的肉眼能看出差距。
是否渐进式JPEG 渐进式(progressive)JPEG文件在文件长度方面通常比常规JPEG文件要更小一点,但质量没啥差别。不过据说某些太过简陋的JPEG解码器可能会不支持渐进式JPEG,万幸的是这种解码器我还没有在任何主流的平台上碰到过。另外生成渐进式JPEG的时候要进行优化编码,所以速度略慢。
是否优化编码 优化编码即优化Huffman编码,可以减小文件长度,但对文件质量无影响,另外在编码前需要对图像进行一次额外的扫描以明确优化方向,所以编码速度略慢。如果JPEG文件是渐进式,则无疑是经过优化编码的。否则本软件就看JPEG文件中的Huffman编码表与IJG中的缺省编码表是否一样,一样就是没有优化编码,不一样就是优化编码。这种判别标准简陋了一点,不过对我而言大体够用了。
量化表数 在JPEG文件的有损压缩过程中,对彩色、灰度图像质量均有直接、明显影响的就是对离散余弦变换(DCT)结果进行量化的过程,即对一堆余弦波进行归并,去掉肉眼感觉不明显的成分。量化过程的依据就是量化表,压缩时用户指定的JPG质量系数其实最终是转换成量化表的系数(factor),只不过不同的软件或固件会有不同的转换算法。灰度图像只有一个通道,所以量化表数也只有1个。YCrCb、YCCK色彩空间虽然有多个通道,但所有色彩通道被认为是平等的,所以量化表数通常也只有2个,一个是亮度(Y)通道使用,另外一个是所有色彩通道共用。
是否16位量化表 量化表的数据精度通常8位就够了,但如果质量系数过低或使用了优化编码,可能就需要16位数据精度才能保证不会被误差所淹没。
由量化表反推压缩时的质量系数 从JPG文件中读取出量化表后,如果知道从质量系数到量化表的计算过程,其实是可以反推出生成JPG文件时用户所指定的质量系数的。但除了开源的Independent JPEG Group(IJG)外,像Photoshop等闭源的商业软件的计算过程就只能靠猜了。本软件学的是JPEGsnoop:对于所有JPG文件,都按照IJG的计算过程进行反推,至于反推得准不准,就看方差有多大。 所以这个反推出来的质量系数,其实真正的意思是:IJG源代码在这个质量系数下所计算出来的量化表与源JPG文件中存放的量化表最相似。
方差 从JPEG文件中存储的量化表按照IJG的计算过程反推出质量系数,再算回量化表后,与原量化表差值的均方差。由于反算过程采用浮点计算,因此即使两个量化表完全一样,算出来的均方差也不会是0。通常如果均方差小于5,基本上可以认为两个量化表是一致的,即反推出来的质量系数是靠谱的,否则就是仅供参考了。 具体反推计算过程请查阅JPEGsnoop的源代码。
是否一样 由于“方差”不是很准,所以加了这么一个显示:自动比较JPG文件中的量化表,及按照反推出来的质量系数算出来的IJG量化表,如果二者完全相同则显示“是”,否则显示“否”,如果有两个量化表则中间加斜杠分隔。

在“基本信息”下方,左侧列出了当前JPG文件中的量化表,右侧列出用IJG质量系数算出来的量化表,点击“同步”时可以强制使亮度与色度的质量系数相等。当“基本信息”中的“方差”数值比较大时,可以人工比较一下左右两侧的量化表值,实际查看究竟是偏向文件长度还是偏向保留更多细节:

  1. 量化表中的数值是用来做除数的,所以值越大,除完以后的结果越接近0,即对应的DCT分量将被圆整掉,造成部分图像信息的丢失,同时也减小了文件长度。如果量化表中的值为1则原信息将被保留。
  2. 量化表左上角对应图像中的低频部分,右下角对应高频部分 。而按照JPEG标准中引用的心理学模型,人类对低频部分的变化要比高频部分的变化更敏感,所以JPG压缩时力争保低频、扔低频,导致量化表看起来经常是左上角小于右下角。
  3. 因此,如果量化表中的值较大,尤其是左上角数值较大,则量化表设计者的意图是牺牲质量以追求压缩比,反之则是追求质量。

附录 版本更新记录

Version 1.00
实现JPEG文件的基本压缩信息解码。