6.4 PNG格式
6.4.1 簡(jiǎn)介
PNG是20世紀(jì)90年代中期開始開發(fā)的圖像文件存儲(chǔ)格式,其目的是企圖替代GIF和TIFF文件格式,同時(shí)增加一些GIF文件格式所不具備的特性。流式網(wǎng)絡(luò)圖形格式(Portable Network Graphic Format,PNG)名稱來源于非官方的“PNG's Not GIF”,是一種位圖文件(bitmap file)存儲(chǔ)格式,讀成“ping”。PNG用來存儲(chǔ)灰度圖像時(shí),灰度圖像的深度可多到16位,存儲(chǔ)彩色圖像時(shí),彩色圖像的深度可多到48位,并且還可存儲(chǔ)多到16位的α通道數(shù)據(jù)。PNG使用從LZ77派生的無損數(shù)據(jù)壓縮算法。
PNG文件格式保留GIF文件格式的下列特性:
- 使用彩色查找表或者叫做調(diào)色板可支持256種顏色的彩色圖像。
- 流式讀/寫性能(streamability):圖像文件格式允許連續(xù)讀出和寫入圖像數(shù)據(jù),這個(gè)特性很適合于在通信過程中生成和顯示圖像。
- 逐次逼近顯示(progressive display):這種特性可使在通信鏈路上傳輸圖像文件的同時(shí)就在終端上顯示圖像,把整個(gè)輪廓顯示出來之后逐步顯示圖像的細(xì)節(jié),也就是先用低分辨率顯示圖像,然后逐步提高它的分辨率。
- 透明性(transparency):這個(gè)性能可使圖像中某些部分不顯示出來,用來創(chuàng)建一些有特色的圖像。
- 輔助信息(ancillary information):這個(gè)特性可用來在圖像文件中存儲(chǔ)一些文本注釋信息。
- 獨(dú)立于計(jì)算機(jī)軟硬件環(huán)境。
- 使用無損壓縮。
PNG文件格式中要增加下列GIF文件格式所沒有的特性:
- 每個(gè)像素為48位的真彩色圖像。
- 每個(gè)像素為16位的灰度圖像。
- 可為灰度圖和真彩色圖添加α通道。
- 添加圖像的γ信息。
- 使用循環(huán)冗余碼(cyclic redundancy code,CRC)檢測(cè)損害的文件。
- 加快圖像顯示的逐次逼近顯示方式。
- 標(biāo)準(zhǔn)的讀/寫工具包。
- 可在一個(gè)文件中存儲(chǔ)多幅圖像。
6.4.2 文件結(jié)構(gòu)
PNG圖像格式文件(或者稱為數(shù)據(jù)流)由一個(gè)8字節(jié)的PNG文件署名(PNG file signature)域和按照特定結(jié)構(gòu)組織的3個(gè)以上的數(shù)據(jù)塊(chunk)組成。
PNG定義了兩種類型的數(shù)據(jù)塊,一種是稱為關(guān)鍵數(shù)據(jù)塊(critical chunk),這是標(biāo)準(zhǔn)的數(shù)據(jù)塊,另一種叫做輔助數(shù)據(jù)塊(ancillary chunks),這是可選的數(shù)據(jù)塊。關(guān)鍵數(shù)據(jù)塊定義了4個(gè)標(biāo)準(zhǔn)數(shù)據(jù)塊,每個(gè)PNG文件都必須包含它們,PNG讀寫軟件也都必須要支持這些數(shù)據(jù)塊。雖然PNG文件規(guī)范沒有要求PNG編譯碼器對(duì)可選數(shù)據(jù)塊進(jìn)行編碼和譯碼,但規(guī)范提倡支持可選數(shù)據(jù)塊。
(1) PNG文件署名域
8字節(jié)的PNG文件署名域用來識(shí)別該文件是不是PNG文件。該域的值是:
十進(jìn)制數(shù) |
137 |
80 |
78 |
71 |
13 |
10 |
26 |
10 |
十六進(jìn)制數(shù) |
89 |
50 |
4e |
47 |
0d |
0a |
1a |
0a |
(2) 數(shù)據(jù)塊的結(jié)構(gòu)
每個(gè)數(shù)據(jù)塊都由表6-07所示的的4個(gè)域組成。
表6-07 PNG文件數(shù)據(jù)塊的結(jié)構(gòu)
名稱 |
字節(jié)數(shù) |
說明 |
Length(長(zhǎng)度) |
4字節(jié) |
指定數(shù)據(jù)塊中數(shù)據(jù)域的長(zhǎng)度,其長(zhǎng)度不超過 (231-1)字節(jié) |
Chunk Type Code(數(shù)據(jù)塊類型碼) |
4字節(jié) |
數(shù)據(jù)塊類型碼由ASCII字母(A-Z和a-z)組成 |
Chunk Data(數(shù)據(jù)塊數(shù)據(jù)) |
可變長(zhǎng)度 |
存儲(chǔ)按照Chunk Type Code指定的數(shù)據(jù) |
CRC(循環(huán)冗余檢測(cè)) |
4字節(jié) |
存儲(chǔ)用來檢測(cè)是否有錯(cuò)誤的循環(huán)冗余碼 |
在表6-07中,CRC(cyclic redundancy check)域中的值是對(duì)Chunk Type Code域和Chunk Data域中的數(shù)據(jù)進(jìn)行計(jì)算得到的。CRC具體算法定義在ISO 3309和ITU-T V.42中,其值按下面的CRC碼生成多項(xiàng)式進(jìn)行計(jì)算:
x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1
6.4.3 數(shù)據(jù)塊結(jié)構(gòu)
1. 關(guān)鍵數(shù)據(jù)塊
關(guān)鍵數(shù)據(jù)塊中的4個(gè)標(biāo)準(zhǔn)數(shù)據(jù)塊是:
(1) 文件頭數(shù)據(jù)塊IHDR(header chunk):它包含有PNG文件中存儲(chǔ)的圖像數(shù)據(jù)的基本信息,并要作為第一個(gè)數(shù)據(jù)塊出現(xiàn)在PNG數(shù)據(jù)流中,而且一個(gè)PNG數(shù)據(jù)流中只能有一個(gè)文件頭數(shù)據(jù)塊。
文件頭數(shù)據(jù)塊由13字節(jié)組成,它的格式如表6-08所示。
表6-08 PNG文件頭鍵數(shù)據(jù)塊的結(jié)構(gòu)
域的名稱 |
字節(jié)數(shù) |
說明 |
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:帶α通道數(shù)據(jù)的灰度圖像,8或16 6:帶α通道數(shù)據(jù)的真彩色圖像,8或16 |
Compression method |
1 byte |
壓縮方法(LZ77派生算法) |
Filter method |
1 byte |
濾波器方法 |
Interlace method |
1 byte |
隔行掃描方法:
0:非隔行掃描
1: Adam7(由Adam M. Costello開發(fā)的7 遍隔行掃描方法) |
(2) 調(diào)色板數(shù)據(jù)塊PLTE(palette chunk):它包含有與索引彩色圖像((indexed-color image))相關(guān)的彩色變換數(shù)據(jù),它僅與索引彩色圖像有關(guān),而且要放在圖像數(shù)據(jù)塊(image data chunk)之前。真彩色的PNG數(shù)據(jù)流也可以有調(diào)色板數(shù)據(jù)塊,目的是便于非真彩色顯示程序用它來量化圖像數(shù)據(jù),從而顯示該圖像。調(diào)色板數(shù)據(jù)塊結(jié)構(gòu)如表6-09所示。
表6-09 調(diào)色板數(shù)據(jù)塊結(jié)構(gòu)
域的名稱 |
字節(jié)數(shù) |
說明 |
Red |
1 byte |
0 = 黑,255 = 紅 |
Green |
">
0 = 黑,255 = 綠 |
Blue |
1 byte |
0 = 黑,255 = 藍(lán) |
調(diào)色板實(shí)際是一個(gè)彩色索引查找表,它的表項(xiàng)數(shù)目可以是1~256中的一個(gè)數(shù),每個(gè)表項(xiàng)有3字節(jié),因此調(diào)色板數(shù)據(jù)塊所包含的最大字節(jié)數(shù)為768。
(3) 圖像數(shù)據(jù)塊IDAT(image data chunk):它存儲(chǔ)實(shí)際的數(shù)據(jù),在數(shù)據(jù)流中可包含多個(gè)連續(xù)順序的圖像數(shù)據(jù)塊。
(4) 圖像結(jié)束數(shù)據(jù)IEND(image trailer chunk):它用來標(biāo)記PNG文件或者數(shù)據(jù)流已經(jīng)結(jié)束,并且必須要放在文件的尾部。
除了表示數(shù)據(jù)塊開始的IHDR必須放在最前面, 表示PNG文件結(jié)束的IEND數(shù)據(jù)塊放在最后面之外,其他數(shù)據(jù)塊的存放順序沒有限制。
2. 輔助數(shù)據(jù)塊
PNG文件格式規(guī)范制定的10個(gè)輔助數(shù)據(jù)塊是:
(1) 背景顏色數(shù)據(jù)塊bKGD(background color)。
(2) 基色和白色度數(shù)據(jù)塊cHRM(primary chromaticities and white point)。所謂白色度是指當(dāng)R=G=B=最大值時(shí)在顯示器上產(chǎn)生的白色度。
(3) 圖像γ數(shù)據(jù)塊gAMA(image gamma)。
(4) 圖像直方圖數(shù)據(jù)塊hIST(image histogram)。
(5) 物理像素尺寸數(shù)據(jù)塊pHYs(physical pixel dimensions)。
(6) 樣本有效位數(shù)據(jù)塊sBIT(significant bits)。
(7) 文本信息數(shù)據(jù)塊tEXt(textual data)。
(8) 圖像最后修改時(shí)間數(shù)據(jù)塊tIME (image last-modification time)。
(9) 圖像透明數(shù)據(jù)塊tRNS (transparency)。
(10) 壓縮文本數(shù)據(jù)塊zTXt (compressed textual data)。
3. 數(shù)據(jù)塊摘要
關(guān)鍵數(shù)據(jù)塊、輔助數(shù)據(jù)塊和專用公共數(shù)據(jù)塊(special-purpose public chunks)綜合在表6-10中。
表6-10 PNG文件格式中的數(shù)據(jù)塊
數(shù)據(jù)塊符號(hào) |
數(shù)據(jù)塊名稱 |
多數(shù)據(jù)塊 |
可選否 |
位置限制 |
IHDR |
文件頭數(shù)據(jù)塊 |
否 |
否 |
第一塊 |
cHRM |
基色和白色點(diǎn)數(shù)據(jù)塊 |
否 |
是 |
在PLTE和IDAT之前 |
gAMA |
圖像γ數(shù)據(jù)塊 |
否 |
是 |
在PLTE和IDAT之前 |
sBIT |
樣本有效位數(shù)據(jù)塊 |
否 |
是 |
在PLTE和IDAT之前 |
PLTE |
調(diào)色板數(shù)據(jù)塊 |
否 |
是 |
在IDAT之前 |
bKGD |
背景顏色數(shù)據(jù)塊 |
否 |
是 |
在PLTE之后IDAT之前 |
hIST |
圖像直方圖數(shù)據(jù)塊 |
否 |
是 |
在PLTE之后IDAT之前 |
tRNS |
圖像透明數(shù)據(jù)塊 |
否 |
是 |
在PLTE之后IDAT之前 |
oFFs |
(專用公共數(shù)據(jù)塊) |
否 |
是 |
在IDAT之前 |
pHYs |
物理像素尺寸數(shù)據(jù)塊 |
否 |
是 |
在IDAT之前 |
sCAL |
(專用公共數(shù)據(jù)塊) |
否 |
是 |
在IDAT之前 |
IDAT |
圖像數(shù)據(jù)塊 |
是 |
否 |
與其他IDAT連續(xù) |
tIME |
圖像最后修改時(shí)間數(shù)據(jù)塊 |
否 |
是 |
無限制 |
tEXt |
文本信息數(shù)據(jù)塊 |
是 |
是 |
無限制 |
zTXt |
壓縮文本數(shù)據(jù)塊 |
是 |
是 |
無限制 |
fRAc |
(專用公共數(shù)據(jù)塊) |
是 |
是 |
無限制 |
gIFg |
(專用公共數(shù)據(jù)塊) |
是 |
是 |
無限制 |
gIFt |
(專用公共數(shù)據(jù)塊) |
是 |
是 |
無限制 |
gIFx |
(專用公共數(shù)據(jù)塊) |
是 |
是 |
無限制 |
IEND |
圖像結(jié)束數(shù)據(jù) |
否 |
否 |
最后一個(gè)數(shù)據(jù)塊 |
tEXt
和zTXt數(shù)據(jù)塊中的標(biāo)準(zhǔn)關(guān)鍵字:
Title |
圖像名稱或者標(biāo)題 |
Author |
圖像作者名 |
Description |
圖像說明 |
Copyright |
版權(quán)聲明 |
CreationTime |
原圖創(chuàng)作時(shí)間 |
Software |
創(chuàng)作圖像使用的軟件 |
Disclaimer |
棄權(quán) |
Warning |
圖像內(nèi)容警告 |
Source |
創(chuàng)作圖像使用的設(shè)備 |
Comment |
各種注釋 |
posted on 2005-06-22 16:54
小米 閱讀(751)
評(píng)論(1) 編輯 收藏 所屬分類:
其它