PNG檢視原始碼討論檢視歷史
PNG |
png是一種無損壓縮的位圖片形格式。其設計目的是為了替代GIF和TIFF文件格式,同時增加一些GIF文件格式所不具備的特性。
png格式是非失真性壓縮的,允許使用類似於GIF格式的調色板技術,支持真彩色圖像,並具備阿爾法通道(半透明)等特性。png使用從LZ77派生的無損數據壓縮算法,由於它壓縮比高,生成文件體積小,一般被應用於JAVA程序、網頁或S60程序中。
目錄
格式特性
版本歷史
文件結構
文件格式
相關對比
數據結構
相關信息
格式特性
使用彩色查找表或者叫做調色板可支持256種顏色的彩色圖像。
流式讀/寫性能
圖像文件格式允許連續讀出和寫入圖像數據,這個特性很適合於在通信過程中生成和顯示圖像。
逼近顯示
這種特性可使在通信鏈路上傳輸圖像文件的同時就在終端上顯示圖像,把整個輪廓顯示出來之後逐步顯示圖像的細節,也就是先用低分辨率顯示圖像,然後逐步提高它的分辨率。
透明性
這個性能可使圖像中某些部分不顯示出來,用來創建一些有特色的圖像。
輔助信息
這個特性可用來在圖像文件中存儲一些文本注釋信息。
獨立於計算機軟硬件環境。
使用無損壓縮。
PNG文件格式中要增加下列GIF文件格式所沒有的特性:
每個像素為48位的真彩色圖像。
每個像素為16位的灰度圖像。
可為灰度圖和真彩色圖添加α通道。
添加圖像的γ信息。
使用循環冗餘碼(cyclic redundancy code,CRC)檢測損壞的文件。
加快圖像顯示的逐次逼近顯示方式。
標準的讀/寫工具包。
版本歷史
1995年早期,Unisys公司根據它在GIF格式中使用的LZW數據壓縮算法的軟件專利(美國 第4558302號)開始商業收費。為避免專利影響,用於表現單張圖像的PNG、用於表現動畫的MNG圖形文件格式被同時創建出來。1999年8月,Unisys公司進一步中止了對自由軟件和非商用軟件開發者的GIF專利免費許可,從而使PNG格式獲得了更多的關注。
在PNG傳播過程中,很多網絡瀏覽器經過很長時間才開始支持PNG格式,如Windows默認的IE瀏覽器一直到最新的版本IE7才完整支持PNG格式。這造成PNG格式並沒有得到廣泛的認知。
PNG的1.0版本規範於1996年7月1日發布,後來被稱為RFC 2083標準,並在1996年10月1日成為W3C建議。
PNG的1.1版本進行了部分小幅修改並增加了三個新的數據塊定義,於1998年12月31日發布。
PNG的1.2版本增加了另外一個數據塊,於1999年8月11日發布。
PNG現行版本是國際標準(ISO/IEC 15948:2003),並在2003年11月10日作為W3C建議發布。這個版本與1.2版僅有細微差別。
此外也產生了基於PNG的動畫格式,1996年6月提出PNF(Portable Network Frame)草案,當年8月改名為MNG(Multiple-image Network Graphics)。
2004年末,PNG的動畫擴展,APNG被提出來。這是一個相對於MNG更簡單的動畫實現方案,不識別APNG格式的PNG解碼器至少能夠正常回放第一幅普通PNG畫面。
文件結構
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 1310 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
4文件格式編輯 PNG格式有8位、24位、32位三種形式,其中8位PNG支持兩種不同 的透明形式(索引透明和alpha透明),24位PNG不支持透明,32位 PNG 在24位基礎上增加了8位透明通道,因此可展現256級透明程度。
相關對比
PNG與GIF對比
PNG使用了從LZ77派生的一個非專利無失真式壓縮算法(名為deflation)。這個算法對圖像里的直線進行預測然後存儲顏色差值,這使得PNG經常能獲得比原始圖像甚至比GIF更大的壓縮率。但也有一些軟件不能使用適合的預測而造成過分臃腫的PNG文件。
數據結構
關鍵數據塊
關鍵數據塊中的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或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所示。
調色板數據塊結構
域的名稱 字節數 說明
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數據塊放在最後面之外,其他數據塊的存放順序沒有限制。
輔助數據塊
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)。
數據塊摘要
關鍵數據塊、輔助數據塊和專用公共數據塊(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 圖像結束數據 否 否 最後一個數據塊
數據塊中的標準關鍵字
Title
圖像名稱或者標題
Author
圖像作者名
Description
圖像說明
Copyright
版權聲明
CreationTime
原圖創作時間
Software
創作圖像使用的軟件
Disclaimer
棄權
Warning
圖像內容警告
Source
創作圖像使用的設備
Comment[1]
各種注釋
相關信息
Portable Network Gra Portable Network Gra 某島國名
PNG = Papua New Guinea 巴布亞新幾內亞(大洋洲一島國)
天然氣
piping natural gas
通過長輸管線輸送的天然氣,區別於壓縮天然氣(CNG)和液化天然氣(LNG)。