JPEG数据格式分析

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

被放大N倍的8x8图片,仅做理解用

用windows照片查看器查看图片详细信息:

信息参数
大小667字节
尺寸8x8
宽度8像素
高度8像素
水平分辨率96dpi
垂直分辨率96dpi
位深度24

用UltraEdit打开图片,截图如下:
8x8图片数据
将该数据切分为10个部分,图中已做标记。

预备知识
JPEG文件由两部分组成:标记码和压缩数据。JPEG图像所有信息都由标记码记录,标记码之间用若干个0xFF分开。

  • 数据第一部分
    JPEG格式由SOI(start of image)标记码开头:
标记结构字节数
0xFF1
0xD81

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

标记结构字节数意义对应数据(十六进制)
0xFF1FF
0xE01E0
Lp2APP0标记码长度00 10(由此看出该标记码长度为16字节)
Identifier5JFIF识别码4A 46 49 46 00(“JFIF”)
Version2JFIF版本号01 01
Units1单位01
Xdensity2水平分辨率00 60(90dpi)
Ydensity2垂直分辨率00 60(90dpi)
Xthumbnail1水平点数00
Ythumbnail1垂直点数00

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

  • 数据第二部分
    该部分是DQT(define quantization table)标记码。看看该标记码格式:
标记结构字节数意义对应数据(十六进制)
0xFF1FF
0xDB1DB
Lq2DQT标记码长度00 43(67字节)
(Pq, Tq)1在基本系统中Pq=0,Tq=0~100(说明后面量化表中的每个值为1个字节)
Q01或2量化表的值02
Q11或2量化表的值01
Qn1或2量化表的值0c

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

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

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

标记结构字节数意义对应数据(十六进制)
0xFF1FF
0xC01C0
Lf2SOF标记码长度11(17字节)
P1基本系统中为808
Y2图像高度00 08(8个像素)
X2图像宽度00 08(8个像素)
Nf1为1代表灰度图,为3代表彩色图03(彩色)
C11成分编号 101
(H1, V1)1第一个采样因子22
Tq11该量化表编号00
Cn1成分编号n03
(Hn,Vn)1第n个采样因子11
Tqn1该量化表编号01
  • 数据第五部分
    该部分开头为0xFF 0xC4,是DHT(define huffman table)标记码定义了哈弗曼树表
标记结构字节数意义对应数据(十六进制)
0xFF1FF
0xC41C4
Lh2DHT标记码长度00 1F(31个字节)
(Tc, Th)100
L1100
L16100
V1101
Vt10B

该标记中,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)标记码,如下表

标记结构字节数意义对应数据(十六进制)
0xFF1FF
0xDA1DA
Ls2SOS标记码长度00 0C
Ns1
Cs11
(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)
标记结构字节数
0xFF1
0xD91
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值