1. 程式人生 > 實用技巧 >JPEG圖片格式詳解

JPEG圖片格式詳解

2-1 JPEG圖片格式詳解

1. JPEG格式檔案簡介

JPEG(Joint Photographic Experts Group,聯合影象專家小組),是一種常用的影象儲存格式, jpg/jpeg是24位的影象檔案格式,也是一種高效率的壓縮格式,是面向連續色調靜止影象的一種壓縮標準。同樣一幅畫面,用.jpg/.jpeg格式儲存的檔案是其他型別圖形檔案的1 /10~1/20。一般情況下,.jpg/.jpeg檔案只有幾十KB,而色彩數最高卻可達到24位,所以它被廣泛運用在Internet上,以節約寶貴的網路傳輸資源。

1.1 拓展名.jpg與.jpeg

JPEG的檔案格式一般有兩種副檔名:.jpg和.jpeg,這兩種副檔名的實質是相同的,我們可以把.jpg的檔案改名為.jpeg,而對檔案本身不會有任何影響。嚴格來講,JPEG的副檔名應該為.jpeg,由於DOS時代的8.3檔名命名原則,就使用了.jpg的副檔名,這種情況類似於.htm和.html的區別。

1.2 JPEG的三種格式

JPEG格式可以分為:標準JPEG、漸進式JPEG 和 JPEG2000三種格式。

  • 標準JPEG:

該型別的圖片檔案,在網路上應用較多,只有圖片完全被載入和讀取完畢之後,才能看到圖片的全貌;它是一種很靈活的圖片壓縮方式,使用者可以在壓縮比和圖片品質之間進行權衡。不過通常來講,其壓縮比在10:1到40:1之間,壓縮比越大,品質就越差,壓縮比越小,品質就越好。

  • 漸進式JPEG:

該型別的圖片是對標準JPEG格式的改進,當在網頁上下載漸進式JPEG圖片時,首先呈現圖片的大概外貌,然後再逐漸呈現具體的細節部分,因而被稱之為漸進式JPEG。

  • JPEG2002:

一種全新的圖片壓縮發,壓縮品質更好,並且改善了無線傳輸時,因訊號不穩定而造成的馬賽克及位置錯亂等問題。另外,作為JPEG的升級版,JPEG2000的壓縮率比標準JPEG高約30%,同時支援有失真壓縮和無失真壓縮。它還支援漸進式傳輸,即先傳輸圖片的粗略輪廓,然後,逐步傳輸細節資料,使得圖片由模糊到清晰逐步顯示。

2. JPEG檔案結構詳解

2.1 JPEG圖片格式組成部分

JPEG格式的檔案是分為一個一個的段來儲存的,段的多少和長度並不是一定的。只要包含了足夠的資訊,該JPEG檔案就能夠被開啟,呈現給人們。但JPEG檔案的每個段都一定包含兩部分:

1. 段的標識與型別。它由兩個位元組構成:第一個位元組是段標識0xFF,第二個位元組是段型別(對於不同的段是不同的),具體如以下表:

段型別  表示符號    說明
——————————————————————————————————
SOI D8 檔案頭

APP0 E0 定義交換格式和影象識別資訊
APP1 E1 同上
.... .... ....
APPn En 同上

DQT DB 定義量化表

SOF0 C0 影象基本資訊
SOF1 C1 同上
.... .... ....
SOFn Cn 同上

DHT C4 定義 Huffman 表(霍夫曼表)
DRI DD 定義重新開始間隔
SOS DA 掃描行開始
COM FE 註釋
EOI D9 檔案尾
......

2. 段的長度。緊接著的兩個位元組存放的是這個段的長度(除了前面的兩個位元組0xFF和0xXX,X表示不確定。他們是不算到段的長度中的)。其作用是這樣的話如果一個程式不認識JPEG檔案某個段,它就可以讀取後兩個位元組,得到這個段的長度,並跳過忽略它。

注意:這個長度的表示方法並不是按照傳統intel的方法(低位在前,高位在後,即逆序),而是按照高位在前,低位在後的。比方說一個段的長度是0x12AB,那麼它會按照0x12,0xAB的順序儲存。但是如果按照Intel的方式:高位在後,低位在前的方式會儲存成0xAB,0x12,而這樣的儲存方法對於JPEG是不對的。

綜上,以下是jpeg圖片的段的一般結構:

-----------------------------------------------------------------
名稱 位元組數 資料 說明
-----------------------------------------------------------------
段標識 1 FF 每個新段的開始標識
段型別 1 段型別編碼(稱作“標記碼”)
段長度 2 包括段內容和段長度本身,不包括段標識和段型別
段內容 ≤65533位元組

注意:

  1. 有些段沒有長度描述也沒有內容,只有段標識和段型別。檔案頭和檔案尾均屬於這種段。

  2. 段與段之間無論有多少FF都是合法的,這些FF稱為“填充位元組”,必須被忽略掉。

2.2 段型別

段型別有30種,以下列出幾種必須的或常見的 JPEG檔案段型別。

  1. SOI(必須):SOI段定義了檔案頭。該段僅有兩個位元組:FF D8,這兩個位元組代表了JPEG檔案的開始。

  2. APP0, APP1, APP2....(必須):APP0段定義了交換格式和影象識別資訊。包含了一些畫素和略縮圖相關的資訊。

  3. DQT(必須):DQT段定義了量化表。JPEG檔案一般有兩個DQT段,為亮度定義1個, 為色度定義1個。

  4. SOF0, SOF1, SOF2....(必須):SOF段定義了影象基本資訊。包含了一些圖片長寬高、元件等資訊。

  5. DHT(必須) :DHT段定義了Huffman表,即霍夫曼編碼表。

  6. DRI(非必須):DRI段定義了重新開始間隔,很多JPEG檔案沒有這個段。

  7. SOS(必須):SOS段定義了掃描行開始,緊接著SOS段後的就是一個個掃描行(壓縮的影象資料)。

  8. COM(非必須):COM段定義了註釋段,有的JPEG檔案沒有這個段。

  9. EOI(必須):EOI段定義了檔案尾,該段僅有兩個位元組:FF D9,這兩個位元組代表了JPEG檔案的結束。