Jpg圖片數據結構
表1:段的一般結構
名 稱 位元組數 數據 說明
段 標識 1 FF 每個新段的開始標識
段類型 1 類型編碼(稱作“標記碼”)
段長 度 2 包括段內容和段長度本身,不包括段標識和段類型
段內容≤65533位元組
說明:
①JPG 檔案中所有關於寬度高度長度間隔這一類數據,凡是>1位元組的,均採用Motorola格式,即:高位在前,低位在後。
② 有些段沒有長度描述也沒有內容,只有段標識和段類型。檔案頭和檔案尾均屬於這種段。
③段與段之間無論有多少FF都是合法的,這些FF稱為“填充字 節”,必須被忽略掉。
2.段類型有30種,但只有10種是必須被所有程式識別的,其它的類型都可以忽略。所以下面只列出這 10種類型。
表2:段類型
名稱 標 記碼 說明
SOI D8 檔案頭
EOI D9 文 件尾
SOF0 C0 幀開始(標準 JPEG)
SOF1 C1 同上
DHT C4 定 義 Huffman 表(霍夫曼表)
SOS DA 掃描行開始
DQT DB 定義量化表
DRI DD 定 義重新開始間隔
APP0 E0 定義交換格式和圖像識別信息
COM FE 注釋
說明:有的文章也將DNL段(標記碼=DC,定義掃描行數)列為必須段。
3.以下按一般JPEG檔案的段排列順序詳細介紹 各種段的結構:
表3:SOI(檔案頭)
名稱 位元組數 值
段 標識 1 FF
段類型 1 D8
說明:這兩個位元組構成了 JPEG檔案頭。
表4:APP0(圖像識別信息)
名 稱 位元組數 值 說明
段 標識 1 FF
段類型 1 E0
段長度 2 0010 如果有 RGB縮略圖就=16+3n
(以下為段內容)
交換格式 5 4A46494600 “JFIF”的ASCII碼
主 版本號 1
次版本號 1
密度單位 1 0=無單位;1=點數/英 寸;2=點數/厘米
X像素密度 2 水平方向的密度
Y像素密 度 2 垂直方向的密度
縮略圖X像素 1 縮略圖水平像素數目
縮 略圖Y像素 1 縮略圖垂直像素數目
(如果“縮略圖X像素”和“縮略圖Y像素”的值均>0,那么才有下面的數 據)
RGB縮略圖 3×n n=縮略圖像素總數=縮略圖X像素×縮略圖Y像素
說明:
①JFIF是JPEG File Interchange Format的縮寫,即JPEG檔案交換格式,另外還有TIFF等格式,很少 用
②“如果有RGB縮略圖就=16+3n”是什麼意思呢?比如說“縮略圖X像素”和“縮略圖Y像素”的值均為48,就表示有一個48×48像素的 縮略圖(n=48×48),縮略圖是24位真彩點陣圖,用3個位元組來表示一個像素,所以共占用3n個位元組。但大多數JPG檔案都沒有這個“雞肋”縮略圖。
表 5:COM(注釋)
名 稱 位元組數 值 說明
段 標識 1 FF
段類型 1 FE
段長度 2 其值=注釋字元的位元組數+2
段 內容 注釋字元
說明:有的JPEG檔案沒有這個段。
表6:DQT(定義量化表)
名 稱 位元組數 值 說明
段 標識 1 FF
段類型 1 DB
段長度 2 43 其值=3+n(當只有一個 QT時)
(以下為段內容)
QT信息 1 0-3位:QT號
4-7 位:QT精度(0=8bit,1位元組;否則=16bit,2位元組)
QT n n=64×QT精度的位元組數
說明:
①JPEG檔案一般有2個DQT段,為Y值(亮度)定義1個, 為C值(色度)定義1個。
②一個DQT段可以包含多個 QT, 每個都有自己的信息位元組
表7:SOF0(圖像基本信息)
名 稱 位元組數 值 說明
段 標識 1 FF
段類型 1 C0
段長度 2 其值=8+組件數量×3
(以 下為段內容)
樣本精度 1 8 每個樣本位數(大多數軟體不支持12和16)
圖片高度 2
圖片寬度 2
組 件數量 1 3 1=灰度圖,3=YCbCr/YIQ 彩色圖,4=CMYK 彩色圖
(以下每個組件占用3位元組)
組 件 ID 1 1=Y, 2=Cb, 3=Cr, 4=I, 5=Q
採樣係數 1 0-3位:垂直采 樣係數
4-7位:水平採樣係數
量化表號 1
說明:
①JPEG大都採用yCrCb色彩模型(y表示亮度,Cr紅色分量,Cb表示藍色分量),所以組件數量一般=3
②樣本就是單個像 素的顏色分量,也可理解為一個樣本就是一個組件
③採樣係數是實際採樣方式與最高採樣係數之比,而最高採樣係數一般=0.5(分數表示為1/2)。 比如說,垂直採樣係數=2,那么2×0.5=1,表示實際採樣方式是每個點采一個樣,也就是逐點採樣;如果垂直採樣係數=1,那 么:1×0.5=0.5(分數表示為1/2),表示每2個點采一個樣
表8:DHT(定義Huffman表)
名 稱 位元組數 值 說明
段 標識 1 FF
段類型 1 C4
段長度 2 其值=19+n(當只有一個 HT表時)
(以下為段內容)
HT信息 1 0-3位:HT號
4 位: HT類型, 0=DC表,1=AC表
5-7位:必須=0
HT位 表 16 這16個數的和應該≤256
HT值表 n n=表頭16個數的和
說明:
①JPEG檔案里有2類Haffman 表:一類用於DC(直流量),一類用於AC(交流量)。一般有4個表:亮度的DC和AC,色度的 DC和AC。最多可有6個。
②一個DHT 段可以包含多個HT表, 每個都有自己的信息位元組
③HT表是一個按遞增次序代碼長度排列的符號 表。
表9:DRI(定義重新開始間隔)
名 稱 位元組數 值 說明
段 標識 1 FF
段類型 1 DD
段長度 2 4
(以下為段內容)
開 始間隔 2 n 復位標記的間隔距離
說明:
①開始間隔表示在壓縮數據流中,每隔n個MCU 塊就有一個RST標記,RST標記將Huffman 的解碼數據流復位,DC也重新從0 開始,因此,RST標記是一種復位標記
②RST 標記是一種特殊的段,它只具有段標識和段類型(長度=2位元組),但它不是獨立的段,只能穿插在數 據流中(檔案頭和檔案尾段也只有段標識和段類型,卻都是獨立的段)。
③RST標記共有8個(RST0-RST7),從RST0起開始使用,然後是 RST1....直至RST7,再從RST0重複。
④RST標記的標識碼是 FFD0-FFD7,對應 RST0-RST7
⑤筆者查看了 許多自己電腦上的JPG檔案的數據,未發現DRI段和RST標記,所以無法進行詳盡的考察
表10:SOS(掃描行開始)
名 稱 位元組數 值 說明
段 標識 1 FF
段類型 1 DA
段長度 2 000C 其值=6+2×掃描行內組件數量
(以下為段內容)
掃描行內組件數 量 1 3 必須≥1,≤4(否則錯誤),通常=3
(以下每個組件占用2位元組)
組件 ID 1 1 = Y, 2 = Cb, 3 = Cr, 4 = I, 5 = Q
Huffman表 號 1 0-3位:AC表號 (其值=0...3)
4-7 位:DC表號(其值=0...3)
3 最後3個位元組用途不明,忽略
說明:緊接SOS段後的是壓縮的圖像數據(一個個掃描行),數據存放順序是從左到右、從上到下。
表11:EOI(檔案尾)
名 稱 位元組數 值
段標識 1 FF
段類型 1 D9
說明:這兩個位元組構成了JPEG檔案尾。