ComicEnhancerPro 系列教程十九:用JpegQuality看JPG文件的压缩参数

作者:马健
邮箱:[email protected]
主页:http://www.comicer.com/stronghorse/
发布:2017.07.23

教程十九:用JpegQuality看JPG文件的压缩参数

事先声明:

  1. 严格说来这篇教程是讲JpegQuality的,其实与CEP本身关系不大,但因为我自己经常从CEP启动JpegQuality查看JPG压缩参数,
    我觉得其他人可能也有类似的需求,所以就在CEP系列教程里加了这么一篇,并不是有意给JpegQuality打广告。
  2. JpegQuality显示的信息比较简略,如果想看JPG文件的详细信息,比如说EXIF的具体内容,请使用JPEGsnoop,JpegQuality可以说是它的简化版。
  3. 本文内容是我的一家之言,部分内容可能令人反感,因此技术考据癖、技术抬杠癖敬请退散,不必往下看了,以免浪费你我的时间和口水。
  4. 本文所有数据只基于我手上所拥有的实际样本,并且没有一个样本是厂家直接提供的。如果有文中提到的厂家对本文内容不满,可以抬头向上看,请用上面的邮箱地址与我联系,并提供相关企业身份证据,我将在第一时间删除相关信息并在本文中做补充说明。

言归正传。在上一篇教程中,我列举了与JPG文件长度、质量有关的压缩参数,包括质量系数(其实是量化表)、色彩缩水系数等。在CEP中转存JPG时,一方面可以自己重新设定JPG的压缩参数,另一方面也可以设置为直接copy源JPG文件的压缩参数,以获得与源JPG文件差不多的文件长度和质量。那么常见的图像处理软件,或图像获取设备(相机、手机)所生成的JPG文件,他们的JPG压缩参数又是怎样的?从中又能看出些什么?

用JpegQuality看JPG的压缩参数其实操作很简单,启动JpegQuality后把要看的JPG文件拖拽过去就行了,或者从CEP里启动,即可看到CEP正在处理的JPG文件的压缩参数。以Photoshop
CC 2015为例,我用同一张图片设置为不同色彩空间、用不同质量系数存为JPG后用JpegQuality显示出来的参数如表1所示。表中数据均用WinCam32从JpegQuality直接复制过来,不存在手工输入错误的问题
,以下各表不再重复说明。

表1 Photoshop CC 2015的JPG压缩参数

色彩空间 质量 色彩空间 通道数 采样 数据精度 渐进式 优化编码 量化表数 16位量化表 反推质量系数 方差
RGB色彩空间 0 YCbCr 3 1x1 2x2 2x2 8 2 46/81 20996.66/4238.72
1 YCbCr 3 1x1 2x2 2x2 8 2 52/82 14797.56/3344.80
2 YCbCr 3 1x1 2x2 2x2 8 2 62/85 6735.90/1496.54
3 YCbCr 3 1x1 2x2 2x2 8 2 73/87 2366.12/885.74
4 YCbCr 3 1x1 2x2 2x2 8 2 77/88 1338.37/510.31
5 YCbCr 3 1x1 2x2 2x2 8 2 82/90 671.52/255.96
6 YCbCr 3 1x1 2x2 2x2 8 2 86/91 255.23/98.34
7 YCbCr 3 1x1 1x1 1x1 8 2 83/88 462.13/592.80
8 YCbCr 3 1x1 1x1 1x1 8 2 88 111.68/201.04
9 YCbCr 3 1x1 1x1 1x1 8 2 91 31.57/55.24
10 YCbCr 3 1x1 1x1 1x1 8 2 94 8.52/8.09
11 YCbCr 3 1x1 1x1 1x1 8 2 97 3.47/0.74
12 YCbCr 3 1x1 1x1 1x1 8 2 98 4.81/0.50
CMYK色彩空间 0 YCCK 4 1x1 2x2 2x2 1x1 8 2 46/81 20996.66/4238.72
1 YCCK 4 1x1 2x2 2x2 1x1 8 2 52/82 14797.56/3344.80
2 YCCK 4 1x1 2x2 2x2 1x1 8 2 62/85 6735.90/1496.54
3 YCCK 4 1x1 2x2 2x2 1x1 8 2 73/87 2366.12/885.74
4 YCCK 4 1x1 2x2 2x2 1x1 8 2 77/88 1338.37/510.31
5 YCCK 4 1x1 2x2 2x2 1x1 8 2 82/90 671.52/255.96
6 YCCK 4 1x1 2x2 2x2 1x1 8 2 86/91 255.23/98.34
7 YCCK 4 1x1 1x1 1x1 1x1 8 2 83/88 462.13/592.80
8 YCCK 4 1x1 1x1 1x1 1x1 8 2 88 111.68/201.04
9 YCCK 4 1x1 1x1 1x1 1x1 8 2 91 31.57/55.24
10 YCCK 4 1x1 1x1 1x1 1x1 8 2 94 8.52/8.09
11 YCCK 4 1x1 1x1 1x1 1x1 8 2 97 3.47/0.74
12 YCCK 4 1x1 1x1 1x1 1x1 8 2 98 4.81/0.50
灰度 0 灰度 1 1x1 8 1 46 20996.66
1 灰度 1 1x1 8 1 52 14797.56
2 灰度 1 1x1 8 1 62 6735.9
3 灰度 1 1x1 8 1 73 2366.12
4 灰度 1 1x1 8 1 77 1338.37
5 灰度 1 1x1 8 1 82 671.52
6 灰度 1 1x1 8 1 86 255.23
7 灰度 1 1x1 8 1 83 462.13
8 灰度 1 1x1 8 1 88 111.68
9 灰度 1 1x1 8 1 91 31.57
10 灰度 1 1x1 8 1 94 8.52
11 灰度 1 1x1 8 1 97 3.47
12 灰度 1 1x1 8 1 98 4.81

我从表1看出来的东西:

  1. 我终于明白以前我一直觉得很古怪的YCCK色彩空间是怎么来的了,原来是Adobe给自家在JPEG标准里留的一块自留地。印刷行业是Adobe的传统大客户源,而印刷行业的传统惯用色彩空间是CMYK。与RGB类似,CMYK的4个通道也是平等的,并且把色度与亮度混在一起,
    所以如果想专门针对色度进行缩水以增加压缩比,就只能把CMYK转换成YCCK,然后针对CC色度分量进行缩水。
  2. 色彩就是PS的生命与价值所在,所以PS在存储彩色JPG文件时,只要质量系数不低于7,就不会对色度信息缩水,即“采样”栏显示的都是1x1。而当用户指定了7以下的质量系数时,显然说明用户已经在不顾一切地追求压缩比了,相比之下质量神马的都是浮云,所以色度信息就纵、横各缩水一半,只保留1/4的色度信息,即“采样”栏显示的都是2x2。看到这里,您是不是知道平时用PS的时候应该如何选择质量系数了?
  3. JpegQuality中显示的质量系数是按照IJG的算法反推的,方差反映的是反推出的量化表与JPG中实际所使用的量化表之间的差距。从表1中“方差”列看,质量系数10~12时方差不大,可以认为与IJG的量化表基本相当;质量系数小于等于9时方差明显增大,可以认为PS采用的量化表与IJG所采用的差距较大
  4. 实际对比JpegQuality中左右两侧显示的量化表,质量系数10~12时差异确实不大;7~9时PS逐渐增加量化表左上角的值,右下角保持不变,因此与IJG量化表的差异逐渐拉开;到6时量化表左上角的值比7降了一点,然后随着质量系数的降低左上角值逐渐增加,到5时左上角已经追上右下角,从4开始反超,到0时左上角与右下角差不多是3倍的差距。
  5. PS的量化表在中、低质量时右下角始终保持不变,只增加左上角的值,估计是与PS日常处理的图像多半是照片有关:一堆“数毛党”在盯着细节部分,所以PS不太好对高频分量下手。
  6. 表1中的“渐进式”选项都是“否”,其实只是因为我在PS中存储JPG时“格式选项”选的都是“基线(标准)”,如果选择“连续”就是渐进式了。但即使选择“基线(标准)”,表1中“优化编码”仍然显示“是”,说明PS所使用的缺省Huffman编码表与IJG的不同,估计是经过Adobe自己的优化,以追求更小的文件长度。

在看过软件厂商的JPG参数后,再来看看相机厂家的参数吧,毕竟现在用CEP处理的源文件很多都是用相机拍摄的。我手上现在有佳能A570、G16和尼康D750三款相机,档次分别是入门DC、旗舰DC、中档全画幅单反。用这三款相机内设的不同质量系数进行拍照,直接机内输出JPG,用JpegQuality显示的JPG压缩参数如表2所示。

补充说明:

  1. 目前影响手机、相机成像质量的因素主要包括物理光学组件(镜头、光圈等)、光电转换器(CCD/CMOS)、ISP(Image Signal Processor,图像信号处理器)三部分。
  2. JPG压缩系数只是ISP中的一组小小参数,对最终JPG文件质量的影响究竟具体有多大,至少我还说不出一个具体的数字,所以下面只是我的一些定性分析,而且充满个人的主观色彩,不喜勿看。

表2 相机直出的JPG压缩参数

厂家 型号 质量 像素(千万) 色彩空间 通道数 采样 数据精度 渐进式 优化编码 量化表数 16位量化表 反推质量系数 方差
佳能 A570 超精细 0.7 YCbCr 3 1x1 2x1 2x1 8 2 97 1.65/5.29
精细   YCbCr 3 1x1 2x1 2x1 8 2 93/88 5.28/21.42
标准   YCbCr 3 1x1 2x1 2x1 8 2 72 2.71/648.98
G16 超精细 1.2 YCbCr 3 1x1 2x1 2x1 8 2 97 1.65/5.29
精细   YCbCr 3 1x1 2x1 2x1 8 2 93/88 5.28/21.42
尼康 D750 FINE 2.4 YCbCr 3 1x1 2x1 2x1 8 2 98 5.50/0.89
NOMAL   YCbCr 3 1x1 2x1 2x1 8 2 97 1.22/0.18
BASIC   YCbCr 3 1x1 2x1 2x1 8 2 91 3.28/2.52

我对表2的解读:

  1. 这三款相机不约而同的选择了2x1的色度采样系数,即在色度方面沿宽度方向缩水了一半的信息,高度方向没有缩水。经常听到有人抱怨用RAW格式看照片看得好好的,但输出成JPG就总觉得颜色差了点,估计色度方面的缩水是一个重要原因——即使只是沿单方向缩水,但毕竟也是缩了。
  2. 佳能A570的主控芯片是Digital 4,G16的是Digital
    6,从版本数字上看二者差了两代,但二者的压缩参数完全一样,看来佳能对自己的参数还是很有自信的,没打算做什么修改升级。
  3. 对比尼康、佳能在最高质量时的量化表,尼康的数值明显比佳能更小,可以保留更多的细节。

手机方面我自己到现在为止也只用过一款智能手机,就是拍照效果把我恶心得一提起来就想吐的红米2(采用O-fi欧菲光的解决方案,估计国产的千元机都是这个水平)。所以为了尽量广泛的搜集数据,我就在readfree论坛上搞了一次“手机拍报纸”活动,用论坛币换原片,搜集到的部分手机、PAD的JPG压缩参数见表3。

补充说明:手机厂商现在做广告都以“美美的人像”为号召,而我之所以会以“手机拍报纸”为目标搞活动,是因为我认为现在各种美颜软件实在太过泛滥,用人像根本看不出原始成像质量的好坏,而用“拍报纸”为手段检验相机的对焦精度、成像锐度等,尤其是手机历来短板的边缘成像质量,则是摄影界祖祖辈辈、代代相传的不二法宝,而且与我主要想用手机拍纸质资料的需求相吻合。但出乎我意料的是由于论坛上各位的拍摄水平不一,拍报纸对拍摄水平的要求又比拍
人像更高,所以搜集到的照片不一定真实地体现了手机的成像质量,说不定同样的手机、同样的报纸换个人拍摄效果会更好或更差,不过如果只是想看看JPG压缩参数还是够了。再重申一次:JPG压缩系数只是ISP中的一组小小参数,对最终JPG的质量究竟有多大影响,我也没法具体量化。以红米2为例,尽管质量系数高高在上,但最终拍出来的照片惨不忍睹,只能说与之相配的其它部分实在太便宜了。

表3 我收集到的部分手机、PAD的JPG压缩参数

厂家 型号 像素(千万) 色彩空间 通道数 采样 数据精度 渐进式 优化编码 量化表数 16位量化表 反推质量系数 方差
小米 红米2 0.8 YCbCr 3 1x1 2x2 2x2 8 2 97 1.09/0.24
红米3 1.3 YCbCr 3 1x1 2x2 2x2 8 2 97 1.09/0.24
MiPad 0.8 YCbCr 3 1x1 2x2 2x2 8 2 87 1.28/0.38
Note 1.3 YCbCr 3 1x1 2x2 2x2 8 2 97 3.21/0.24
小米2 0.8 YCbCr 3 1x1 2x2 2x2 8 2 90 1.14/0.34
小米4C 1.3 YCbCr 3 1x1 2x2 2x2 8 2 97 1.09/0.24
小米5s+ 1.3 YCbCr 3 1x1 2x2 2x2 8 2 97 1.09/0.24
华为 P10/P10+ 1.2 YCbCr 3 1x1 2x2 2x2 8 2 94 62.59/57.16
P7 1.3 YCbCr 3 1x1 2x2 2x2 8 2 97 0.87/0.28
Mate2 1.3 YCbCr 3 1x1 2x2 2x2 8 2 97 0.87/0.28
Mate8 1.6 YCbCr 3 1x1 2x2 2x2 8 2 95 41.10/37.48
Mate9 1.2 YCbCr 3 1x1 2x2 2x2 8 2 94 62.59/57.16
荣耀畅玩5x 1.3 YCbCr 3 1x1 2x2 2x2 8 2 95 1.25/0.26
荣耀6+ 1.3 YCbCr 3 1x1 2x1 2x1 8 2 94 62.59/57.16
荣耀7i 1.3 YCbCr 3 1x1 2x2 2x2 8 2 90 1.14/0.34
荣耀7 2 YCbCr 3 1x1 2x2 2x2 8 2 94 62.59/57.16
荣耀8 1.6 YCbCr 3 1x1 2x2 2x2 8 2 95 1.25/0.26
荣耀 NOTE8 1.3 YCbCr 3 1x1 2x2 2x2 8 2 95 41.10/37.48
苹果 IPAD mini 4 0.8 YCbCr 3 1x1 2x2 2x2 8 2 95 5.64/0.59
IP5s+ 0.8 YCbCr 3 1x1 2x2 2x2 8 2 96 1.49
IP6s 1.2 YCbCr 3 1x1 2x2 2x2 8 2 93 12.88/0.19
IP6s+ 1.2 YCbCr 3 1x1 2x2 2x2 8 2 93 12.88/0.19
IP7 1.2 YCbCr 3 1x1 2x2 2x2 8 2 93 12.88/0.19
LG D315 0.5 YCbCr 3 1x1 2x2 2x2 8 2 95 1.25/0.26
F180 1.3 YCbCr 3 1x1 2x2 2x2 8 2 95 1.25/0.26
Nokia Lumia 1020 3.3 YCbCr 3 1x1 2x2 2x2 8 2 95 1.25/0.26
魅族 魅蓝Note4 1.3 YCbCr 3 1x1 2x1 2x1 8 2 96 3.19/1.17
mx pro5   YCbCr 3 1x1 2x1 2x1 8 2 95 1.25/0.26
三星 S2 0.8 YCbCr 3 1x1 2x2 2x2 8 2 95 1.25/0.26
S5 1.2 YCbCr 3 1x1 2x2 2x2 8 2 96 0.69/0.33
S7 1.2 YCbCr 3 1x1 2x1 2x1 8 2 96 0.69/0.33
GT-N7105 0.8 YCbCr 3 1x1 2x1 2x1 8 2 96 0.69/0.33
note 3 1.3 YCbCr 3 1x1 2x2 2x2 8 2 96 0.69/0.33
OPPO R2017 0.5 YCbCr 3 1x1 2x2 2x2 8 2 95 1.25/0.26
Kindle Fire HDX 8.9 0.8 YCbCr 3 1x1 2x2 2x2 8 2 95 1.25/0.26
酷派 9976a 1.3 YCbCr 3 1x1 2x1 2x1 8 2 80 20.03/4.14
vivo xshot  X710L 1.3 YCbCr 3 1x1 2x2 2x2 8 2 95 1.25/0.26

我对表3数据的解读:

  1. 除三星、魅族、酷派外,其它手机基本上都对色度信息进行了双方向缩水。所以我每次见到那些把手机和单反相提并论的广告就想笑:请把缩水掉的色彩信息给我还回来先!咱不说
    无损的RAW格式,就算只沿单方向缩水也比沿双方向缩水强不是?
  2. 华为、苹果的方差比较大,说明所用量化表与IJG的差异较大,即在自身的ISP中进行了定制。以“性价比”为号召的手机一般方差都比价小
    (实际与IJG的量化表比较,那差异更像是计算量化表值时的浮点数舍入误差),可能是使用了公版ISP。
  3. 不同厂家、不同型号的手机具有相同的“指纹”(缩水系数、量化表),说明他们可能使用了相同的ISP,这也是降低成本的一个办法。
时间: 2024-10-12 19:59:06

ComicEnhancerPro 系列教程十九:用JpegQuality看JPG文件的压缩参数的相关文章

ComicEnhancerPro 系列教程十八:JPG文件长度与质量

作者:马健邮箱:[email protected] 主页:http://www.comicer.com/stronghorse/ 发布:2017.07.23 教程十八:JPG文件长度与质量 众所周知,JPG是一种"有损"压缩格式,与PNG等无损压缩格式相比,最大的问题是:如果反复压缩,会造成图像质量逐渐退化.所以在对JPG文件进行处理,并且输出仍然选择JPG格式的情况下,很多人都会问同样的一个问题:如何才能在尽情享受有损压缩带来的较小文件长度的便利前提下,尽量避免图像质量退化? 为了解

ComicEnhancerPro 系列教程二十:用“文件比较”看有损、无损

作者:马健邮箱:[email protected] 主页:http://www.comicer.com/stronghorse/ 发布:2017.07.23 教程二十:用"文件比较"看有损.无损 在前两篇教程中,扯了一大堆JPG文件的有损压缩,平时在网上也经常看到一些人整天把有损.无损挂在嘴边,但具体是否真的无损?有损又损了多少.损在哪里?讲得清的人就真心不多了.CEP从v4.13开始提供"文件比较"功能,可用于定量比较有损.无损. 按照CEP的使用说明,"

CRL快速开发框架系列教程十(导出对象结构)

本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框架系列教程四(删除数据) CRL快速开发框架系列教程五(使用缓存) CRL快速开发框架系列教程六(分布式缓存解决方案) CRL快速开发框架系列教程七(使用事务) CRL快速开发框架系列教程八(使用CRL.Package) CRL快速开发框架系列教程九(导入/导出数据) CRL快速开发框架系列教程十(

Unity3D脚本中文系列教程(十六)

Unity3D脚本中文系列教程(十五) ◆ function OnPostprocessAudio (clip:AudioClip):void 描述:◆  function OnPostprocessGameObjectWithUserProperties (root : GameObject, propNames : string[], values : object[]) : void 描述:在导入文件时,为每个至少附加了一个用户属性的游戏物体调用propNames是一个string[ ],

无废话ExtJs 入门教程十九[API的使用]

无废话ExtJs 入门教程十九[API的使用] extjs技术交流,欢迎加群(201926085) 首先解释什么是 API 来自百度百科的官方解释:API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节. ExtJs的Api必须部署到IIS上,ExtJS的API首页如下图所示: 左侧是搜索栏,可以搜索所有的Ext的组件,如上图

C++语言笔记系列之十九——虚函数(2)

1.构造函数和析构函数中调用虚函数 (1)采用静态编译. (2)在编译阶段自动联接自己类中的函数或基类中的函数,不在派生类中重定义一个函数. 注:构造函数和析构函数中调用的虚函数,派生类都不一定存在的情况下,只能去调用基类或者自身的函数. example 1 #include <iostream.h> class A { public: A() {} virtual void func() {cout<<"A construction."<<endl

ComicEnhancerPro 系列教程十七:二值化图像去毛刺

作者:马健邮箱:[email protected] 主页:http://www.comicer.com/stronghorse/ 发布:2017.07.23 教程十七:二值化图像去毛刺 在灰度图像处理成纯黑白(二值化)图像以后,经常出现的一个问题是轮廓边缘出现毛刺.如下面这个图像: 为了看得更清楚,放大到800%并加网格线: 可以看出在"工"字的上面一横中,上边缘有几个突出点,下边缘有两个凹陷点,而在"业"字左侧竖条中有突出点,下面一横中有凹陷点. 产生毛刺的原因是

Provisioning Services 7.8 入门系列教程之九 手动更新虚拟磁盘

续Provisioning Services 7.8 入门系列教程之八 自动添加设备 在实际在生产环境中,用户总会要对操作系统.应用软件以及驱动程序进行升级.在PVS中,升级实质是对设备所使用的虚拟磁盘进行更新. PVS 7.8提供了两大类更新方式,一是手动更新,一是自动更新.相比自动更新,手动更新最大不便之处在于只能关机更新,无法完成开机状态下的设备.下面将介绍手动更新虚拟磁盘. 在更新虚拟磁盘之前,用户必须了解虚拟磁盘所在位置,模式以及该如何保证更新能顺利完成. 1.查看虚拟磁盘属性:(文件

kubernetes系列教程(十八)TKE中实现ingress服务暴露

写在前面 上一篇文章中介绍了基于Nginx实现Ingress Controller的实现,介绍了Nginx Ingress Controller安装.相关功能,TLS,高级特性等介绍,本章开始介绍基于腾讯云TKE实现ingress服务暴露. 1. TKE ingress 1.1 TKE ingress架构 TKE是Tencent Kubernetes Engine即腾讯云基于kubernetes提供的公有云上容器云服务,TKE提供了两种暴露服务的方式:service和ingress. 内网CLB