博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JPEG数据格式分析
阅读量:4145 次
发布时间:2019-05-25

本文共 1856 字,大约阅读时间需要 6 分钟。

分析对象是一幅8x8的jpg图片。如下,图片已被放大并被虚线切分

这里写图片描述
用windows照片查看器查看图片详细信息:

信息 参数

大小 667字节
尺寸 8x8
宽度 8像素
高度 8像素
水平分辨率 96dpi
垂直分辨率 96dpi
位深度 24
用UltraEdit打开图片,截图如下:
这里写图片描述
将该数据切分为10个部分,图中已做标记。

预备知识

数据第一部分
JPEG格式由SOI(start of image)标记码开头:

标记结构 字节数

0xFF 1
0xD8 1

SOI不用解释。

紧接着是标记码APP0(application),JFIF将文件的相关信息定义在此标记中,如下

标记结构 字节数 意义 对应数据(十六进制)

0xFF 1 FF
0xE0 1 E0
Lp 2 APP0标记码长度 00 10(由此看出该标记码长度为16字节)
Identifier 5 JFIF识别码 4A 46 49 46 00(“JFIF”)
Version 2 JFIF版本号 01 01
Units 1 单位 01
Xdensity 2 水平分辨率 00 60(90dpi)
Ydensity 2 垂直分辨率 00 60(90dpi)
Xthumbnail 1 水平点数 00
Ythumbnail 1 垂直点数 00

至此,数据第一部分分析完。

数据第二部分

该部分是DQT(define quantization table)标记码。看看该标记码格式:
标记结构 字节数 意义 对应数据(十六进制)
0xFF 1 FF
0xDB 1 DB
Lq 2 DQT标记码长度 00 43(67字节)
(Pq, Tq) 1 在基本系统中Pq=0,Tq=0~1 00(说明后面量化表中的每个值为1个字节)
Q0 1或2 量化表的值 02
Q1 1或2 量化表的值 01
Qn 1或2 量化表的值 0c

至此,数据第二部分也分析完

数据第三部分

该部分数据开头为0xFF 0xDB,显然该部分也是个DQT标记码,分析如上,不再赘述。

数据第四部分

该部分开头为0xFF 0xC0,该部分为SOF(start of frame)标记,基线离散余弦变换

标记结构 字节数 意义 对应数据(十六进制)

0xFF 1 FF
0xC0 1 C0
Lf 2 SOF标记码长度 11(17字节)
P 1 基本系统中为8 08
Y 2 图像高度 00 08(8个像素)
X 2 图像宽度 00 08(8个像素)
Nf 1 为1代表灰度图,为3代表彩色图 03(彩色)
C1 1 成分编号 1 01
(H1, V1) 1 第一个采样因子 22
Tq1 1 该量化表编号 00
Cn 1 成分编号n 03
(Hn,Vn) 1 第n个采样因子 11
Tqn 1 该量化表编号 01
数据第五部分
该部分开头为0xFF 0xC4,是DHT(define huffman table)标记码定义了哈弗曼树表

标记结构 字节数 意义 对应数据(十六进制)

0xFF 1 FF
0xC4 1 C4
Lh 2 DHT标记码长度 00 1F(31个字节)
(Tc, Th) 1 00
L1 1 00
L16 1 00
V1 1 01
Vt 1 0B

该标记中,Tc为0指DC所用的Huffman表,Tc为1指AC所用的Huffman表,Th的值为0或1,2Tc+Th表示Huffman表的编号(最多4个),Ln表示每个n为Huffman码字的个数,n = 1~16。Vt表示每个Huffman码字所对应的值,t = L1+L2+…+L16

数据第六部分

同上

数据第七部分

同上

数据第八部分

同上

数据第九部分

该部分为SOS(start of scan)标记码,如下表

标记结构 字节数 意义 对应数据(十六进制)

0xFF 1 FF
0xDA 1 DA
Ls 2 SOS标记码长度 00 0C
Ns 1
Cs1 1
(Td1,Ta1) 1
CsNs
(TdNs,TaNs)
Ss
Se
(Ah,Al)

Ns为scan中成分的个数,CsNs为在scan中的编号,TdNs为高4位,TaNs为低4位,分别表示DC和AC编码表的编号, 基本系统中,Ns = Nf,Ss,Se,Ah,Al均为0

数据第十部分

图像结束标记码0xFF 0xD9,标记码EOF(end of image)

标记结构 字节数

0xFF 1
0xD9 1
(完,稍后整理)

你可能感兴趣的文章
1062 Talent and Virtue (25 分)
查看>>
1061 Dating (20 分)
查看>>
1060 Are They Equal (25 分)
查看>>
83. Remove Duplicates from Sorted List(easy)
查看>>
88. Merge Sorted Array(easy)
查看>>
leetcode刷题191 位1的个数 Number of 1 Bits(简单) Python Java
查看>>
leetcode刷题198 打家劫舍 House Robber(简单) Python Java
查看>>
NG深度学习第一门课作业2 通过一个隐藏层的神经网络来做平面数据的分类
查看>>
leetcode刷题234 回文链表 Palindrome Linked List(简单) Python Java
查看>>
NG深度学习第二门课作业1-1 深度学习的实践
查看>>
Ubuntu下安装Qt
查看>>
Qt札记
查看>>
我的vimrc和gvimrc配置
查看>>
hdu 4280
查看>>
禁止使用类的copy构造函数和赋值操作符
查看>>
C++学习路线
查看>>
私有构造函数
查看>>
组队总结
查看>>
TitledBorder 设置JPanel边框
查看>>
DBCP——开源组件 的使用
查看>>