初识jpg的byte组织信息

  [复制链接]

该用户从未签到

7

主题

357

回帖

3857

积分

[INTOHARD]团长

Rank: 8Rank: 8

积分
3857
发表于 2008-6-28 18:49:46 | 显示全部楼层 |阅读模式
首先说明一下  

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来做分析
  
   由于图片比较多  在我发贴时 请你不要跟贴
本帖评分记录威望 金子 收起 理由
阿哈哈 + 10 精品文章
颓废也---- + 10 精品文章
总评分: 威望 + 10  金子 + 10 

该用户从未签到

7

主题

357

回帖

3857

积分

[INTOHARD]团长

Rank: 8Rank: 8

积分
3857
 楼主| 发表于 2008-6-28 18:50:41 | 显示全部楼层
00baselinejpg是我们要用winhex来研究的jpeg文件

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

该用户从未签到

7

主题

357

回帖

3857

积分

[INTOHARD]团长

Rank: 8Rank: 8

积分
3857
 楼主| 发表于 2008-6-28 18:51:17 | 显示全部楼层
01SOI图像开始

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

该用户从未签到

7

主题

357

回帖

3857

积分

[INTOHARD]团长

Rank: 8Rank: 8

积分
3857
 楼主| 发表于 2008-6-28 18:53:10 | 显示全部楼层
02app0
jpeg最早的交换文件(在appi段中的app0应用  现在通常是1.2的版本)
在画图里你能看到jfif就是  平时我们在软件中生成的都是jfif的jpeg文件

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

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

该用户从未签到

7

主题

357

回帖

3857

积分

[INTOHARD]团长

Rank: 8Rank: 8

积分
3857
 楼主| 发表于 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两个[wiki]字节[/wiki])  在转到偏移地址(图示)后 你就会看到下一个标志符ffed(

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

以下图示相同 就不多言了
03app1.jpg
03app1跳转偏移.jpg

该用户从未签到

7

主题

357

回帖

3857

积分

[INTOHARD]团长

Rank: 8Rank: 8

积分
3857
 楼主| 发表于 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文件可加文字说明或音频说明的原因
04appi中photoshop的扩展应用.jpg
05app1扩展.jpg
06app2扩展.jpg
07appi中photoshop的扩展.jpg

该用户从未签到

7

主题

357

回帖

3857

积分

[INTOHARD]团长

Rank: 8Rank: 8

积分
3857
 楼主| 发表于 2008-6-28 18:59:14 | 显示全部楼层
appn(ffe0-ffef) 是让jpeg能交换的扩展部分 真正的文件从dqt(ffdb量化表开始)

到12SOS扫描行开始 都是jpeg的段的内容  没有此 任何软件无法解码jpg
08DQT量化表.jpg
09SOF0帧开始.jpg
10DRI重启间隔.jpg
11DHT哈表曼表.jpg
12SOS扫描行开始.jpg

该用户从未签到

7

主题

357

回帖

3857

积分

[INTOHARD]团长

Rank: 8Rank: 8

积分
3857
 楼主| 发表于 2008-6-28 19:00:08 | 显示全部楼层
11301压缩码流.jpg图所示003f00后的码流才是真正的压缩熵信息
1301压缩码流.jpg

该用户从未签到

7

主题

357

回帖

3857

积分

[INTOHARD]团长

Rank: 8Rank: 8

积分
3857
 楼主| 发表于 2008-6-28 19:02:06 | 显示全部楼层
以ffdd中定义的mcu块大小分隔的第一个标志符rst(ffdi 通常的应用软件及扫描文件都没有rst   exif也没有)

有rst对于jpeg的修复毫无疑问是太好了  但遗憾的是大多数应用软件编码的jpg是没有rst的
13RST复位间隔0.jpg
13RST复位间隔1.jpg
13RST复位间隔7.jpg
13RST最后的复位间隔6.jpg

该用户从未签到

7

主题

357

回帖

3857

积分

[INTOHARD]团长

Rank: 8Rank: 8

积分
3857
 楼主| 发表于 2008-6-28 19:03:03 | 显示全部楼层
FFD9(EOI)是jpg文件的结束标志  正常的解码到此就停止解码  不过没有ffd9的结束标志 jpeg的文件也是可以解码的
14EOI文件结束.jpg
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表