JPEGsnoop_v1.8.0 汉化版
软件简介
JPEGsnoop 是一款国外的很著名的用来分析 JPEG 文件结构和照片原始性的免费工具,也是业内检测原图的最常用工具之一,目前最新版是 1.7.5。但是因为软件是全英文的界面和分析报告,而且内容比较深入和专业,很多朋友都不知道应该怎么读懂这么长的结果,下面笔者就简单介绍一下。
软件使用
- 这里主要使用笔者使用佳能 Canon 5D Mark III 实拍的一张原图进行分析,其他 型号的分析结果步骤类同。下面笔者将对分析报告的每个细节都一一讲解,如果只需要看原图检测结果的朋友可以直接跳到第 9 和第 10 步。
- 首先我们可以发现一些蓝色的文字,蓝色的行表示这个 JPG 文件中 JPEG段。每个 JPG 图片文件都是由不同的 JPEG 段构成的,不同的 JPEG 段有不同的功能,多打开几张 JPG 图就不难发现,每张 JPG 图都是由 SOI (0xFFD8) 标记开始的,这个标记全称是 Start of Image,即图像开始标识符。
- 一般紧接着 SOI 的下一个 JPEG 段是 APP0 (0xFFE0) 或者 APP1 (0xFFE1)。APP 其实就是 Application 的简称,这些段主要是用于储存图像的元数据的,即图像的属性信息和附加数据。必须注意的是,绝大部分原图是没有 APP0 的,所以打开原图后,一般可以发现仅接着 SOI 后面的第二个 JPEG 段基本上都是清一色的 APP1,而这个 APP1 段的标识符(Identifier)就是 Exif,传说中的 EXIF 信息就是 储存在这个 APP1 段中的。具体的 EXIF 信息可以用更专业的软件查看,比如 ExifTool、MagicEXIF 等,这里就不详述。
- APP1(Exif) 之后的下一个 JPEG 段,往往也是一个 APP1 段(老式型号原图可能没有这个段)。但是这个 APP1 段标识符竟然是 Adobe 的网址。什么?原图竟然有 Adobe 的痕迹?难道这个图被 PS 过了?别急,这个 APP1 段是储存 XMP 数据的,XMP 是一种新的基于 XML 的元数据标准,目前被越来越多的厂商接受,并且大有取代 EXIF 之势,而 XMP 元数据标准正是 Adobe 公司制定的。所以事实上这个类似网址的东西准确来说是叫命名空间(namespace),它是一个 URI 而不是 URL,是用来标记 XML 数据的标签的使用规范的。所以原图中有 XMP 数据完全不是什么值得奇怪的事情。
- 下一个段是每个 JPG 文件必有的段,这个段叫 DQT(0xFFDB),即 Define Quantization Table 的简称。从名字不难推断,这个 JPEG 段是用来定义 JPEG 图像的量化表的。众所周知,JPEG 图有着很出众的图像压缩率,而定义压缩率的正是这个 DQT 段。关于 JPEG 的压缩过程这里不详述,因为比较复杂,有兴趣的朋友可以自行搜索了解。这里主要需要关注的是下面 JPEGsnoop 根据这个 DQT 表给我们计算出来的大概 JPEG 质量,可以看到,笔者 5D3 的原图的质量大概是在 97% 左右。另外,值得留意的是,佳能、尼康、索尼等大厂商原图采用的均是独有的 DQT 表,也就是说,DQT 表的特征可以成为判断是否是某厂商原图的重要依据。
- 下一个段一般是 SOF0(0xFFC0),即 Start of Frame #0,JPEG 图像帧的开始。这里主要定义的是 JPEG 图的 DCT 离散余弦变换类型、实际尺寸和位深度。聪明的你可能会问,有 SOF0 是不是也有 SOF1、SOF2 等等呢?对的,SOF0 是最常见的 DCT 变换类型,叫基线DCT(Baseline DCT),95% 以上的 JPEG 图都是这种。另一种也可能碰到的是 SOF2,也叫渐进式 DCT(Progressice DCT),其他的 SOF 段基本上就极少碰见了。有兴趣的朋友也可以去搜索一下 JPEG 图像的压缩过程,即可了解不同 DCT 的区别。
- 下一个段一般是 DHT(0xFFC4),即 Define Huffman Table,定义哈夫曼 表,这个段也可以在 SOF 之前出现。一般 DHT 段会有 1 个或者 4 个,这是因为一般基线 DCT 的 JPEG 图都是两张 DC 表(直流系数)和两张 AC 表(交流 系数),这四张表可以放在同一个 DHT 段,也可以分别放在不同的 DHT 段。DHT 表是用于重建哈夫曼树的,主要用于基线 JPEG 的压缩编码算法,这里不详述,有兴趣的朋友可以去搜索一下哈夫曼编码。
- 随后的段一般就是 SOS(0xFFDA),Start of Scan,图像实际压缩数据的开始,即告知图像解码器从这里正式开始扫描并根据 DQT 和 DHT 来解码图像的像素内容。因为储存的是图像像素的压缩数据,SOS 之后的数据是占据了 JPEG 图像文件的绝大部分体积(超过99%)。扫描一直到遇到 EOI(0xFFD9)结束,即 End of Image,EOI 也是图像内容结尾的正式标记(但不一定是文件 结尾的标记,具体看第12步)。
- 最后最好玩的就是报告结尾的这个表和原图检测的级别了。可能很多人有疑问,这个表是什么呢?这个表事实上是这个图的特征和 JPEGsnoop 的原图数据库的匹配结果列表,简单来说,就是 JPEGsnoop 认不认识这个型号的原图。这个表的匹配结果是基于以上所述的 DQT 和 EXIF 特征的,如果 JPEGsnoop 能够匹配到数据库中的相机原图特征,那么就会用绿色来高亮显示那一行,即说明这个图是 JPEGsnoop 已知的原图。当然,如果绿色高亮的是 Photoshop 或其他 软件的特征,则说明这个图被那个软件修改过,自然可以确定不是原图。
- 这里也必须说明一下 JPEGsnoop 的原图检测级别。JPEGsnoop 的原图检测一共有四个等级,但不是越高越好。Class 1 表明可以确定照片被修改过,Class 2 表明照片极可能被修改过,Class 3 表明照片极可能是原图,Class 4 表明 JPEGsnoop 无法匹配到原图特征,所以不能准确判断。这么一说就清楚了,Class 3 的原图事实上比 Class 4 的要高出了一级。当且仅当照片没有发现 PS 痕迹并且匹配到原图特征(参考第 9 步)的时候,照片才能得到 Class 3 的结果;如果没有发现 PS 痕迹,但是却不能匹配到任何原图特征,那么只能是 Class 4 的结果。因为笔者实拍的 5D3 原图是 JPEGsnoop 数据库有收录的,自然是得到了 Class 3 的最高级结果。
- 网上有些完全不懂 JPEG 结构的“专家”可能会宣称 Class 4 的图比 Class 3 高级,那是完全胡扯了,其实只要稍稍读一下 JPEGsnoop 的原文描述就十分清楚。不过确实有一种情况下的原图是 Class 4 的结果:JPEGsnoop 没有收录的型号,即手机的原图和比较新的相机型号原图,因为 JPEGsnoop 没有收录这些原图数据,所以不能做匹配(参考第 9 步),自然匹配不到任何原图特征,所以也只能得到 Class 4 的结果。
- 有些原图拉到最后可能还有有一行红色小字(如下图),说明这个文件有 EOF 文件末端附加数据,End of File。一般附加数据是什么呢?主要是 MPF 多帧 J PEG 图数据、厂商自定义的附属数据等等,因此有 EOF 数据的话往往也可以在一定程度上说明照片的原始性。
下载地址
微软云盘:http://t.cn/Ai9y8Mji
小可本地:http://t.cn/Ai9y805S
版权声明:
作者:三炮不吃鱼
链接:https://www.keke.moe/archives/701.html
文章版权归作者所有,未经允许请勿转载。
THE END