lhs6531 发表于 2008-6-28 18:49:46

初识jpg的byte组织信息

首先说明一下

1你要对jpg文件的编码解码有一点基础我上传过资料 你请先看一下为好

2由于每种设备(如不同的数码相机或扫描设备)和软件(如ps或acd等)对jpeg的编码解码有所不同(如范式huffman表的构建)
   在byte上的jpeg码流的组织有许不同

3在各种jpeg文件中baselinejpg(基线jpeg或译基本jpg)是最广泛的(iso要求任何jpg解码程序都要能解baselinejpg)
   另外对于扩展jpg 就修复jpg来说有天然的困难 我们不要考虑之
   因此我以一个baseline jpg文件来说明

4由于photoshop保存的jpeg是我知道的应用软件中最好最标准的jpeg文件格式(也可能是兼容性最好的)
   我将以一个www.intohard.com的屏幕硬copy文件 00baselinejpg.jpg
   在ps中保存为jpeg文件为例 来让大家先对jpeg的编码有所初认
   事实上对于不同的质量因子ps中的jpeg文件其huffman表及量化表等是不同的
    所以我的jpg文件在ps中是以8的精度保存的
    还有一点 在ps中输出网页用的jpg与我们上述的jpg有一点不同 我会讲一下

5在一篇文章里要一下对jpeg的广度和深度有所了解比较困难因此我的初讲不会太深
   目的是先让大家对jpeg有初步认识   有问题可跟贴

6因为我们的目的是以修复jpg为上 我不会以编程的方式来讲段的问题不过你要有所了解
   winhex是分析jpg码流的好软件我们将以winhex来做分析

   由于图片比较多在我发贴时 请你不要跟贴

lhs6531 发表于 2008-6-28 18:50:41

00baselinejpg是我们要用winhex来研究的jpeg文件

jpg文件是由各种段(含段的标志 内容) 及压缩码流组成让我们开始认识它

lhs6531 发表于 2008-6-28 18:51:17

01SOI图像开始

任何jpeg文件都是以ffd8的标志符开始无此标志符 任何软件都无法解码jpg文件

lhs6531 发表于 2008-6-28 18:53:10

02app0
jpeg最早的交换文件(在appi段中的app0应用现在通常是1.2的版本)
在画图里你能看到jfif就是平时我们在软件中生成的都是jfif的jpeg文件

大多数的通用恢复软件用特征码找jpg文件时先找ffd8然后就会找代码4A46494600(jfif)以便确定之
(看一下winhex的File Type Signatures.txt文件就知道了)

本图示有段的说明(以下图示相同)
因为段的内容说明较多本文暂不讲解

lhs6531 发表于 2008-6-28 18:54:38

03app1
jpeg的另一种交换文件exif(在appi段中的app1和app2的扩展应用)
exif是日本数码相机的标准格式 现在新版本是2.2在jpeg的标准扩展应用中应该属于jpeg tiff标志头的应用
由于现在数码相机的流行 exif也是我们常见的jpg文件了(exif也以jpg为扩展名)
标准的exif文件头是没有ffe0所以以恢复数码相机文件的软件其算法是以考虑45786966(exif)代码为其次

这就是为什么有的软件有针对性的原因


03app1跳转偏移
ffe1是标志符 1c24是段长(但不包括ffe1两个字节)在转到偏移地址(图示)后 你就会看到下一个标志符ffed(

见04appi中photoshop的扩展应用图)

以下图示相同 就不多言了

lhs6531 发表于 2008-6-28 18:57:18

在ffd1中保存有数码相机 拍照时间 应用软件名称软件修改时间等

ffd2中记录有色彩空间也可能没有ffe2

因为每个标志段内容不能超过64k所以可能会出现多个appi 如两个ffe1   ffe2等
实际上因为 ffe1 ffe2属于appi的定义 而exif使用app1及app2
其扩展定义使其可有多个即app1 app2 可以有多个

通常ffe1前者中记录有缩略图及exif中常用的扩展定义 如相机生产者 型号日期创建时间等
而后一个ffe1记录有adobe对于可扩展元数据平台(xmp)功能的扩展支持

实际上exif中的扩展定义使其甚至能带音频文件头这就是我们有的数码相机对于拍照的jpg文件可加文字说明或音频说明的原因

lhs6531 发表于 2008-6-28 18:59:14

appn(ffe0-ffef) 是让jpeg能交换的扩展部分 真正的文件从dqt(ffdb量化表开始)

到12SOS扫描行开始 都是jpeg的段的内容没有此 任何软件无法解码jpg

lhs6531 发表于 2008-6-28 19:00:08

11301压缩码流.jpg图所示003f00后的码流才是真正的压缩熵信息

lhs6531 发表于 2008-6-28 19:02:06

以ffdd中定义的mcu块大小分隔的第一个标志符rst(ffdi 通常的应用软件及扫描文件都没有rst   exif也没有)

有rst对于jpeg的修复毫无疑问是太好了但遗憾的是大多数应用软件编码的jpg是没有rst的

lhs6531 发表于 2008-6-28 19:03:03

FFD9(EOI)是jpg文件的结束标志正常的解码到此就停止解码不过没有ffd9的结束标志 jpeg的文件也是可以解码的
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 初识jpg的byte组织信息