PNG格式說明

PNG是20世紀90年代中期開始開發的圖像文件存儲格式,其目的是企圖替代GIF和TIFF文件格式,同時增加一些GIF文件格式所不具備的特性。流式網絡圖形格式(Portable Network Graphic Format,PNG)名稱來源於非官方的“PNG's Not GIF”,是一種位圖文件(bitmap file)存儲格式,讀成“ping”。PNG用來存儲灰度圖像時,灰度圖像的深度可多到16位,存儲彩色圖像時,彩色圖像的深度可多到48位,並且還可存儲多到16位的α通道數據。PNG使用從LZ77派生的無損數據壓縮算法。

PNG文件格式保留GIF文件格式的下列特性:

  1. 使用彩色查找表或者叫做調色板可支持256種顏色的彩色圖像。
  2. 流式讀/寫性能(streamability):圖像文件格式允許連續讀出和寫入圖像數據,這個特性很適合於在通信過程中生成和顯示圖像。
  3. 逐次逼近顯示(progressive display):這種特性可使在通信鏈路上傳輸圖像文件的同時就在終端上顯示圖像,把整個輪廓顯示出來之後逐步顯示圖像的細節,也就是先用低分辨率顯示圖像,然後逐步提高它的分辨率。
  4. 透明性(transparency):這個性能可使圖像中某些部分不顯示出來,用來創建一些有特色的圖像。
  5. 輔助信息(ancillary information):這個特性可用來在圖像文件中存儲一些文本註釋信息。
  6. 獨立於計算機軟硬件環境。
  7. 使用無損壓縮。

PNG文件格式中要增加下列GIF文件格式所沒有的特性:

  1. 每個像素爲48位的真彩色圖像。
  2. 每個像素爲16位的灰度圖像。
  3. 可爲灰度圖和真彩色圖添加α通道。
  4. 添加圖像的γ信息。
  5. 使用循環冗餘碼(cyclic redundancy code,CRC)檢測損害的文件。
  6. 加快圖像顯示的逐次逼近顯示方式。
  7. 標準的讀/寫工具包。
  8. 可在一個文件中存儲多幅圖像。

文件結構

PNG圖像格式文件(或者稱爲數據流)由一個8字節的PNG文件署名(PNG file signature)域和按照特定結構組織的3個以上的數據塊(chunk)組成。

PNG定義了兩種類型的數據塊,一種是稱爲關鍵數據塊(critical chunk),這是標準的數據塊,另一種叫做輔助數據塊(ancillary chunks),這是可選的數據塊。關鍵數據塊定義了4個標準數據塊,每個PNG文件都必須包含它們,PNG讀寫軟件也都必須要支持這些數據塊。雖然PNG文件規範沒有要求PNG編譯碼器對可選數據塊進行編碼和譯碼,但規範提倡支持可選數據塊。

(1) PNG文件署名域

8字節的PNG文件署名域用來識別該文件是不是PNG文件。該域的值是:

十進制數 137 80 78 71 13 10 26 10
十六進制數 89 50 4e 47 0d 0a 1a 0a

 

(2) 數據塊的結構

每個數據塊都由表6-07所示的的4個域組成。

表6-07 PNG文件數據塊的結構

名稱

 

字節數

 

說明

 

Length(長度) 4字節 指定數據塊中數據域的長度,其長度不超過
(231-1)字節
Chunk Type Code(數據塊類型碼) 4字節 數據塊類型碼由ASCII字母(A-Z和a-z)組成
Chunk Data(數據塊數據) 可變長度 存儲按照Chunk Type Code指定的數據
CRC(循環冗餘檢測) 4字節 存儲用來檢測是否有錯誤的循環冗餘碼

 

在表6-07中,CRC(cyclic redundancy check)域中的值是對Chunk Type Code域和Chunk Data域中的數據進行計算得到的。CRC具體算法定義在ISO 3309和ITU-T V.42中,其值按下面的CRC碼生成多項式進行計算:

x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1

數據塊結構

1. 關鍵數據塊

關鍵數據塊中的4個標準數據塊是:

(1) 文件頭數據塊IHDR(header chunk):它包含有PNG文件中存儲的圖像數據的基本信息,並要作爲第一個數據塊出現在PNG數據流中,而且一個PNG數據流中只能有一個文件頭數據塊。

文件頭數據塊由13字節組成,它的格式如表6-08所示。

表6-08 PNG文件頭鍵數據塊的結構

域的名稱

 

字節數

 

說明

 

Width 4 bytes 圖像寬度,以像素爲單位
Height 4 bytes 圖像高度,以像素爲單位
Bit depth 1 byte 圖像深度:
索引彩色圖像:1,2,4或8
灰度圖像:1,2,4,8或16
真彩色圖像:8或16
ColorType 1 byte 顏色類型:
0:灰度圖像, 1,2,4,8或16
2:真彩色圖像,8或16
3:索引彩色圖像,1,2,4或8

4:帶α通道數據的灰度圖像,8或16
6:帶α通道數據的真彩色圖像,8或16

 

Compression method 1 byte 壓縮方法(LZ77派生算法)
Filter method 1 byte 濾波器方法
Interlace method 1 byte 隔行掃描方法:

0:非隔行掃描

1: Adam7(由Adam M. Costello開發的7
遍隔行掃描方法)

 

 

(2) 調色板數據塊PLTE(palette chunk):它包含有與索引彩色圖像((indexed-color image))相關的彩色變換數據,它僅與索引彩色圖像有關,而且要放在圖像數據塊(image data chunk)之前。真彩色的PNG數據流也可以有調色板數據塊,目的是便於非真彩色顯示程序用它來量化圖像數據,從而顯示該圖像。調色板數據塊結構如表6-09所示。

表6-09 調色板數據塊結構

域的名稱

 

字節數

 

說明

 

Red 1 byte 0 = 黑,255 = 紅
Green ">

0 = 黑,255 = 綠

 

Blue 1 byte 0 = 黑,255 = 藍

 

調色板實際是一個彩色索引查找表,它的表項數目可以是1~256中的一個數,每個表項有3字節,因此調色板數據塊所包含的最大字節數爲768。

(3) 圖像數據塊IDAT(image data chunk):它存儲實際的數據,在數據流中可包含多個連續順序的圖像數據塊。

(4) 圖像結束數據IEND(image trailer chunk):它用來標記PNG文件或者數據流已經結束,並且必須要放在文件的尾部。

除了表示數據塊開始的IHDR必須放在最前面, 表示PNG文件結束的IEND數據塊放在最後面之外,其他數據塊的存放順序沒有限制。

2. 輔助數據塊

PNG文件格式規範制定的10個輔助數據塊是:

(1) 背景顏色數據塊bKGD(background color)。

(2) 基色和白色度數據塊cHRM(primary chromaticities and white point)。所謂白色度是指當R=G=B=最大值時在顯示器上產生的白色度。

(3) 圖像γ數據塊gAMA(image gamma)。

(4) 圖像直方圖數據塊hIST(image histogram)。

(5) 物理像素尺寸數據塊pHYs(physical pixel dimensions)。

(6) 樣本有效位數據塊sBIT(significant bits)。

(7) 文本信息數據塊tEXt(textual data)。

(8) 圖像最後修改時間數據塊tIME (image last-modification time)。

(9) 圖像透明數據塊tRNS (transparency)。

(10) 壓縮文本數據塊zTXt (compressed textual data)。

3. 數據塊摘要

關鍵數據塊、輔助數據塊和專用公共數據塊(special-purpose public chunks)綜合在表6-10中。

表6-10 PNG文件格式中的數據塊

數據塊符號

 

數據塊名稱

 

多數據塊

 

可選否

 

位置限制

 

IHDR 文件頭數據塊

 

 

第一塊
cHRM 基色和白色點數據塊

 

 

在PLTE和IDAT之前
gAMA 圖像γ數據塊

 

 

在PLTE和IDAT之前
sBIT 樣本有效位數據塊

 

 

在PLTE和IDAT之前
PLTE 調色板數據塊

 

 

在IDAT之前
bKGD 背景顏色數據塊

 

 

在PLTE之後IDAT之前
hIST 圖像直方圖數據塊

 

 

在PLTE之後IDAT之前
tRNS 圖像透明數據塊

 

 

在PLTE之後IDAT之前
oFFs (專用公共數據塊)

 

 

在IDAT之前
pHYs 物理像素尺寸數據塊

 

 

在IDAT之前
sCAL (專用公共數據塊)

 

 

在IDAT之前
IDAT 圖像數據塊

 

 

與其他IDAT連續
tIME 圖像最後修改時間數據塊

 

 

無限制
tEXt 文本信息數據塊

 

 

無限制
zTXt 壓縮文本數據塊

 

 

無限制
fRAc (專用公共數據塊)

 

 

無限制
gIFg (專用公共數據塊)

 

 

無限制
gIFt (專用公共數據塊)

 

 

無限制
gIFx (專用公共數據塊)

 

 

無限制
IEND 圖像結束數據

 

 

最後一個數據塊

 

tEXt和zTXt數據塊中的標準關鍵字:

Title

圖像名稱或者標題

Author

圖像作者名

Description

圖像說明

Copyright

版權聲明

CreationTime

原圖創作時間

Software

創作圖像使用的軟件

Disclaimer

棄權

Warning

圖像內容警告

Source

創作圖像使用的設備

Comment

各種註釋

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章