四種圖像格式的組成

BMP 格式

位圖文件由文件頭(BITMAPFILEHEADER)、位圖信息頭(BITMAPINFOHEADER)、顏色信息(RGBQUAD)和圖形數據(IMAGEDATA)四部份組成。

  1. 文件頭主要包含文件的大小、文件類型、圖像數據偏離文件頭的長度等信息;
  2. 位圖信息頭包含圖像的尺寸信息、圖形用幾個比特數值來表示一個像素、圖像是否壓縮、圖像所用的顏色數等信息;
  3. 顏色信息包含圖像所用到的顏色表,顯示圖像時需用到這個顏色表來生成調色板,但如果圖像為真彩色,即圖像的每個像素用 24 個比特來表示,文件中就沒有這一塊信息,也就不需要操作調色板。
  4. 文件中的數據塊表示圖像的相應的像素值。
    圖像的像素值在文件中的存放順序為從左到右,從下到上,也就是說,在 BMP 文件中首先存放的是圖像的最後一行像素,最後才存儲圖像的第一個,但對于同一行的像素,則是先左邊后右邊的順序存儲的;例外一個需要關注的細節是:文件存儲圖像的每一行像素值時,如果存儲該行像素值所占的字節數為 4 的倍數,則正常存儲;否則需要在後端補 0,湊足 4 的倍數。
    對於 2 色位圖,用 1 位就可以表示該像素的顏色(0 黑,1 白);
    對於 16 色位圖,用 4 為可以表示一個像素的顏色;
    對於 256 色位圖,1 個字節剛好可以表示 1 個像素;
    對於真彩色圖,3 個字節才能表示 1 個像素。

TIFF 格式

TIFF 圖像文件由文件頭、標識信息區和圖像數據區組成。

  1. 文件頭(Image File Header)由字節分類域、版本域和偏移域。
    字節分類域標誌了 TIFF 文件被創建時的字節分類,一般包含 2 個字節“MM”或者“II”。“MM”表示為摩托羅拉格式,“II”表示為英特爾格式。
    版本域包含一個特定的十進制數 4210,他可以用來進一步確認該文件為 TIFF 文件,幾乎沒有變化。
    偏移域包含了從文件的起始部份到圖像文件目錄 IFD 的字節偏移。
  2. 文件目錄(IFD)
    一個 TIFF 文件可能有一個或者多個 IFD,每個 IFD 的起始位置都是偶字節數,說明文件包含了不只一副圖像。若文件內只存儲一副圖像,則將標誌信息請內容置 0,表示文件內務其他標誌信息區,只存儲單幅的 TIFF 圖像文件結構。如果有多個 IFD 存在,則文件內存放多幅圖像,則在第一個標誌信息區末端的標誌參數,僵尸一個非 0 的長整數值,表示下一個標誌信息區在文件中的地址,只有最後一個標誌信息區的末端才會出現值為 0 的長整數,表示圖像文件內不再有其他的標誌信息區和圖像數據區。 3.數據區塊
    圖像數據的排列時以圖像的左上角為座標原點,兩個座標軸的方向分別是從左到右和從上到下。

JPEG 格式

JPEG 有以下 8 部份組成:

  1. 圖像開始 SOI 標記
  2. APP0 標記(Marker)
    • APP0 長度(length)
    • 標誌符(identifier)
    • 版本號(version)
    • X 和 Y 的密度單位(units=0:無單位;units=1:點數/inch;units=2:點數/cm)
    • X 方向像素密度(X density)
    • Y 方向像素密度(Y density)
    • 縮略圖水平像素數目(thumbnail horizontal pixels)
    • 縮略圖垂直像素數目(thumbnail vertical pixels)
    • 縮略圖 RGB 位圖(thumbnail RGB bitmap)
  3. APPn 標記(Markers),其中 n=1~15(任選)
    • APPn 長度(length)
    • 應用詳細信息(application specific information)
  4. 一個或者多個量化表 DQT(define quantization table)
    • 量化表長度(quantization table length)
    • 量化表數目(quantization table number)
    • 量化表(quantization table)
  5. 幀圖像開始 SOF0(start of frame)
    • 幀開始長度(start of frame length)
    • 精度(precision),每個顏色分量每個像素的位數(bits per pixel per color component)
    • 圖像高度(image height)
    • 圖像寬度(image width)
    • 顏色分量數(number of color components)
    • 顏色分量(for each component)包括 ID 號、垂直方向的樣本因子(vertical sample factor)、水平方向的樣本因子(horizontal sample factor)、量化表號(quantization table)等
  6. 一個或者多個哈夫曼表 DHT(difine huffman table)
  • 哈夫曼表的長度(Huffman table length)
  • 類型、AC 或者 DC(Type,AC or DC)
  • 索引(Index)
  • 位表(bits table)
  • 值表(value table) 7.掃描開始 SOS(start of scan)
  • 掃描開始長度(start of scan length)
  • 顏色分量數(number of color components)
  • 顏色分量 包括 ID 號、交流係數表號(AC table)、直流係數表號(DC table)等
  • 壓縮圖像數據(compressed image data) 8.圖像結束 EOI(end of image)

PNG 格式

PNG 圖像有一個 8 字節的 PNG 文件署名(PNG file signature)域和按照特定結構組成的 3 個以上的數據塊(chunk)組成。數據塊定義了 2 種類型,一種為關鍵數據塊(critical chunk),這是標準數據塊,另一種為輔助數據塊(ancillary chunks),可選數據塊。

  1. 關鍵數據塊

    • 圖像文件頭數據塊 IHDR
    • 圖像調色板數據塊 PLTE
    • 圖像數據塊 IDAT
    • 圖像結束數據 IEND
  2. 輔助數據塊

    • 背景顏色數據塊 bKGD -基色和白色度數據塊 cHRM
    • 圖像 γ 數據塊 gAMA
    • 圖像直方圖數據塊 hIST
    • 物理像素尺寸數據塊 pHYs
    • 樣本有效位數據塊 sBIT
    • 文本信息數據塊 tEXt
    • 圖像最後修改時間數據塊 tIME
    • 圖像透明數據塊 tRNS
    • 壓縮文本數據塊 zTXt
坚持原创技术分享,您的支持将鼓励我继续创作!