JPEG数据格式分析

添加链接描述
参考如让(感谢原创分享):
JPEG数据分析:
在这里插入图片描述

分析对象是一幅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

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值