1、JPG文件格式:
(1)JPG = “段” + 經過壓縮編碼的圖像數據
什麼是‘段’?段是一種數據結構,主要是來控制一段數據怎樣存儲和表示,段的結構如下:
段 = 段標識 + 段類型 + 段長度 +段內容 (其中文件頭和文件尾屬於沒有‘段長度’和‘段內容’的特殊的段)
(2)‘段標識’是一種固定的符號--“FF”,段的類型有30種,其中有10中是每個JPG圖片中必須存在的,其餘的都是可選的類型,在此,我們就那10中類型加以說明,如下:
【1】D8 ---- 文件頭 【2】D9 --- 文件尾 【3】FE --- 註釋 【4】C0 --- 幀開始 【5】C1 --- 幀開始
【6】C4 --- 定義Huffman表 【7】DA --- 掃描行開始 【8】DB --- 定義量化表 【9】DD---定義重新開始間隔
【10】E0 --- 定義交換格式和圖像識別信息
因此,一般的JPG格式的圖片通過十六進制的文件磁盤內容查看器發現:文件頭爲:FF D8 ,而且通常在此之後都有FF E0(其後一般接JFIF)來表明圖像識別信息和交換格式,文件尾爲:FF D9。
2、PNG文件格式:
(1)文件結構如下:
PNG文件 = PNG標識 + 數據塊 + 數據塊 + …… + 數據塊(其中數據塊的個數最少是4)
(2)PNG標識是固定的,以十六進制表示爲:【89 50 4E 47 0D 0A 1A 0A】,對應的符號爲:【 ‰ P N G . . . . 】
數據塊分析如下:
PNG文件 - PNG標識 = IHDR + 可選數據塊 + PLTE + 可選數據塊 + IDAT + 可選數據塊 + IEND
分別說明如下:
【1】IHDR數據塊,文件頭數據塊,在一個PNG文件裏只能有一個。
【2】PLTE數據塊,調色板數據塊,它僅與索引彩色圖像有關,其中,‘索引圖像’是指--一種把像素值直接作爲RGB調色板下標的圖像。
【3】IDAT數據塊,圖像數據塊,存儲實際的圖像數據,在數據流中包含多個連續順序的圖像數據塊。
【4】IEND數據塊,圖像結束數據塊,表示--數據流已結束,放在文件的末尾。
以上的數據塊都是以自己的名字作爲開頭來控制一段數據。其中,結尾數據塊IEND的內容固定:
【00 00 00 00 49 45 4E 44 AE 42 60 82】,對應的符號如下:
【. . . . I E N D (後四位爲CRC校驗碼)】
3、GIF文件格式:
(1)文件的單位是數據塊,文件的結構如下:
GIF文件 = 文件頭 + GIF數據流 + 文件結束塊
GIF數據流 = 控制塊 + 成像塊 + 特殊用途塊
(2)文件頭大小爲6個字節,而且【文件頭 = 標識符(3字節) + 版本(3字節)】,其中,標識符爲“GIF”,版本一般是“87a”或者“89a”。
文件結束塊是一個單字節的數據塊,它指示數據流的結束,值爲“0x3B”,符號是“;”。
注意:GIF文件中的每個數據塊都有一個塊尾記錄,大小爲1個字節,同樣也是“0x3B”。
4、BMP文件格式:
(1)文件結構如下:
BMP文件 = 文件頭信息塊 + 圖像描述信息塊 + 顏色表 + 圖像數據區
(2)關於文件頭信息塊,0000--000D,其中,【0000--0001】爲2個字節的文件標識“BM”,【0002--0005】爲4個字節的文件大小的值,【0006--0009】爲4個字節的保留值,分別爲【00 00 00 00】,【000A -- 000D】爲圖像數據區的起始位置(偏移量),它的值等於前三個內容的大小的和。
另外,幾個比較重要的位置有:【000A---000D】圖像數據的起始位置,【0022--0025】圖像數據的大小,【000E--0011】圖像描述信息塊大小,【0012--0015】圖像寬度,【0016--0019】圖像高度。