PNGæ ¼å¼
PNGæ˜?0世纪90òq´ä»£ä¸æœŸå¼€å§‹å¼€å‘的囑փ文äšgå˜å‚¨æ ¼å¼åQŒå…¶ç›®çš„æ˜¯ä¼å›¾æ›¿ä»£GIFå’ŒTIFFæ–‡äšgæ ¼å¼åQŒåŒæ—¶å¢žåŠ ä¸€äº›GIFæ–‡äšgæ ¼å¼æ‰€ä¸å…·å¤‡çš„ç‰ÒŽ€§ã€‚æµå¼ç½‘¾lœå›¾å½¢æ ¼å¼?Portable Network Graphic FormatåQŒPNG)åç§°æ¥æºäºŽéžå®˜æ–¹çš„“PNG's Not GIFâ€ï¼Œæ˜¯ä¸€¿Uä½å›¾æ–‡ä»?bitmap file)å˜å‚¨æ ¼å¼åQŒè¯»æˆâ€œpingâ€ã€‚PNG用æ¥å˜å‚¨ç°åº¦å›‘Öƒæ—Óž¼Œç°åº¦å›‘փ的深度å¯å¤šåˆ°16ä½ï¼Œå˜å‚¨å½©è‰²å›‘Öƒæ—Óž¼Œå½©è‰²å›‘փ的深度å¯å¤šåˆ°48ä½ï¼Œòq¶ä¸”˜q˜å¯å˜å‚¨å¤šåˆ°16ä½çš„‚Îé€šé“æ•°æ®ã€‚PNG使用从LZ77‹z„¡”Ÿçš„æ— æŸæ•°æ®åŽ‹¾~©ç®—法ã€?/font>
PNGæ–‡äšgæ ¼å¼ä¿ç•™GIFæ–‡äšgæ ¼å¼çš„下列特性:
使用彩色查找表或者å«åšè°ƒè‰²æ¿å¯æ”¯æŒ?56¿U颜色的彩色囑փã€?
‹¹å¼è¯?写性能(streamability)åQšå›¾åƒæ–‡ä»¶æ ¼å¼å…许连¾l读出和写入囑փ数æ®åQŒè¿™ä¸ªç‰¹æ€§å¾ˆé€‚åˆäºŽåœ¨é€šä¿¡˜q‡ç¨‹ä¸ç”Ÿæˆå’Œæ˜„¡¤ºå›‘Öƒã€?
逿¬¡é€ÆD¿‘昄¡¤º(progressive display)åQšè¿™¿U特性å¯ä½¿åœ¨é€šä¿¡é“¾èµ\ä¸Šä¼ è¾“å›¾åƒæ–‡ä»¶çš„åŒæ—¶ž®±åœ¨¾lˆç«¯ä¸Šæ˜¾½Cºå›¾åƒï¼ŒæŠŠæ•´ä¸ªè½®å»“显½Cºå‡ºæ¥ä¹‹åŽé€æ¥æ˜„¡¤ºå›‘փ的细节,也就是先用低分èöL率显½Cºå›¾åƒï¼Œç„¶åŽé€æ¥æé«˜å®ƒçš„分èöL率ã€?
逿˜Žæ€?transparency)åQšè¿™ä¸ªæ€§èƒ½å¯ä‹Éå›‘Öƒä¸æŸäº›éƒ¨åˆ†ä¸æ˜„¡¤ºå‡ºæ¥åQŒç”¨æ¥åˆ›å»ÞZ¸€äº›æœ‰ç‰¹è‰²çš„图åƒã€?
辅助信æ¯(ancillary information)åQšè¿™ä¸ªç‰¹æ€§å¯ç”¨æ¥åœ¨å›¾åƒæ–‡ä»¶ä¸å˜å‚¨ä¸€äº›æ–‡æœ¬æ³¨é‡Šä¿¡æ¯ã€?
独立于计½Ž—机软硬件环境ã€?
ä½¿ç”¨æ— æŸåŽ‹ç¾ƒã€?/font>
PNGæ–‡äšgæ ¼å¼ä¸è¦å¢žåŠ ä¸‹åˆ—GIFæ–‡äšgæ ¼å¼æ‰€æ²¡æœ‰çš„特性:
æ¯ä¸ªåƒç´ ä¸?8ä½çš„真彩色图åƒã€?
æ¯ä¸ªåƒç´ ä¸?6ä½çš„ç°åº¦å›‘Öƒã€?
å¯äØ“ç°åº¦å›‘Ö’ŒçœŸå½©è‰²å›¾æ·ÕdŠ ‚Î通é“ã€?
æ·ÕdŠ å›‘Öƒçš„Î³ä¿¡æ¯ã€?
使用循环冗余ç ?cyclic redundancy codeåQŒCRC)‹‚€‹¹‹æŸå®³çš„æ–‡äšgã€?
åŠ å¿«å›‘Öƒæ˜„¡¤ºçš„逿¬¡é€ÆD¿‘昄¡¤ºæ–¹å¼ã€?
æ ‡å‡†çš„è¯»/写工具包ã€?
å¯åœ¨ä¸€ä¸ªæ–‡ä»¶ä¸å˜å‚¨å¤šå¹…囑փã€?/font>
æ–‡äšg¾l“æž„
PNGå›‘Öƒæ ¼å¼æ–‡äšg(æˆ–è€…ç§°ä¸ºæ•°æ®æµ)ç”׃¸€ä¸?å—节的PNGæ–‡äšg¾|²å(PNG file signature)域和按照特定¾l“æž„¾l„织çš?个以上的数æ®å?chunk)¾l„æˆã€?/font>
PNG定义了两¿U类型的数æ®å—,一¿U是¿UîCؓ关键数æ®å?critical chunk)åQŒè¿™æ˜¯æ ‡å‡†çš„æ•°æ®å—,å¦ä¸€¿Uå«åšè¾…助数æ®å—(ancillary chunks)åQŒè¿™æ˜¯å¯é€‰çš„æ•°æ®å—。关键数æ®å—定义äº?ä¸ªæ ‡å‡†æ•°æ®å—åQŒæ¯ä¸ªPNGæ–‡äšg都必™åÕdŒ…å«å®ƒä»¬ï¼ŒPNGè¯Õd†™è½¯äšgä¹Ÿéƒ½å¿…é¡»è¦æ”¯æŒè¿™äº›æ•°æ®å—。虽然PNGæ–‡äšgè§„èŒƒæ²¡æœ‰è¦æ±‚PNG¾~–译ç 器对å¯é€‰æ•°æ®å—˜q›è¡Œ¾~–ç 和译ç ,但规范æå€¡æ”¯æŒå¯é€‰æ•°æ®å—ã€?/font>
(1) PNGæ–‡äšg¾|²ååŸ?/p>
8å—节的PNGæ–‡äšg¾|²å域用æ¥è¯†åˆ«è¯¥æ–‡äšgæ˜¯ä¸æ˜¯PNGæ–‡äšg。该域的值是åQ?/p>
å进制数 | 137 | 80 | 78 | 71 | 13 | 10 | 26 | 10 |
åå…˜q›åˆ¶æ•?/font> | 89 | 50 | 4e | 47 | 0d | 0a | 1a | 0a |
 
(2) æ•°æ®å—çš„¾l“æž„
æ¯ä¸ªæ•°æ®å—都ç”Þp¡¨6-07所½Cºçš„çš?个域¾l„æˆã€?/font>
è¡?-07 PNGæ–‡äšgæ•°æ®å—çš„¾l“æž„
åç§° |
å—节æ•?/p> |
说明 |
Length(长度) | 4å—节 | 指定数æ®å—䏿•°æ®åŸŸçš„长度åQŒå…¶é•¿åº¦ä¸è¶…˜q?br />(231åQ?)å—节 |
Chunk Type Code(æ•°æ®å—类型ç ) | 4å—节 | æ•°æ®å—类型ç ç”±ASCIIå—æ¯(A-Zå’Œa-z)¾l„æˆ |
Chunk Data(æ•°æ®å—æ•°æ? | å¯å˜é•¿åº¦ | å˜å‚¨æŒ‰ç…§Chunk Type Code指定的数æ?/font> |
CRC(循环冗余‹‚€‹¹? | 4å—节 | å˜å‚¨ç”¨æ¥‹‚€‹¹‹æ˜¯å¦æœ‰é”™è¯¯çš„åó@环冗余ç |
 
在表6-07ä¸ï¼ŒCRC(cyclic redundancy check)域ä¸çš„值是对Chunk Type Code域和Chunk Data域ä¸çš„æ•°æ®è¿›è¡Œè®¡½Ž—得到的。CRC具体½Ž—法定义在ISO 3309å’ŒITU-T V.42ä¸ï¼Œå…¶å€¼æŒ‰ä¸‹é¢çš„CRCç 生æˆå¤š™å¹å¼˜q›è¡Œè®¡ç®—åQ?/font>
x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1
æ•°æ®å—结æž?/p>
1. 关键数æ®å?/p>
关键数æ®å—ä¸çš?ä¸ªæ ‡å‡†æ•°æ®å—是:
(1) æ–‡äšg头数æ®å—IHDR(header chunk)åQšå®ƒåŒ…嫿œ‰PNGæ–‡äšgä¸å˜å‚¨çš„囑փ数æ®çš„基本信æ¯ï¼Œòq¶è¦ä½œäØ“½W¬ä¸€ä¸ªæ•°æ®å—出现在PNG数残¹ä¸åQŒè€Œä¸”一个PNG数残¹ä¸åªèƒ½æœ‰ä¸€ä¸ªæ–‡ä»¶å¤´æ•°æ®å—ã€?/font>
æ–‡äšg头数æ®å—ç”?3å—节¾l„æˆåQŒå®ƒçš„æ ¼å¼å¦‚è¡?-08所½Cºã€?/font>
è¡?-08 PNGæ–‡äšg头键数æ®å—çš„¾l“æž„
域的åç§° |
å—节æ•?/p> |
说明 |
Width | 4 bytes | 囑փ宽度åQŒä»¥åƒç´ 为å•ä½?/font> |
Height | 4 bytes | 囑փ高度åQŒä»¥åƒç´ 为å•ä½?/font> |
Bit depth | 1 byte |
囑փ深度åQ?br />索引彩色囑փåQ?åQ?åQ?æˆ? ç°åº¦å›‘ÖƒåQ?åQ?åQ?åQ?æˆ?6 真彩色图åƒï¼š8æˆ?6 |
ColorType | 1 byte |
颜色¾cÕdž‹åQ?br />0åQšç°åº¦å›¾åƒ? 1åQ?åQ?åQ?æˆ?6 2åQšçœŸå½©è‰²å›‘ÖƒåQ?æˆ?6 3åQšçƒ¦å¼•彩色图åƒï¼Œ1åQ?åQ?æˆ?
4åQšå¸¦‚Îé€šé“æ•°æ®çš„ç°åº¦å›¾åƒï¼Œ8æˆ?6 |
Compression method | 1 byte | 压羃æ–ÒŽ³•(LZ77‹z„¡”Ÿ½Ž—法) |
Filter method | 1 byte | 滤æ‡L器方æ³?/font> |
Interlace method | 1 byte |
éš”è¡Œæ‰«ææ–ÒŽ³•åQ?/font>
0åQšéžéš”行扫æ
1åQ?Adam7(ç”±Adam M. Costelloå¼€å‘çš„7 |
 
(2) è°ƒè‰²æ¿æ•°æ®å—PLTE(palette chunk)åQšå®ƒåŒ…嫿œ‰ä¸Žç´¢å¼•彩色囑փ((indexed-color image))ç›¸å…³çš„å½©è‰²å˜æ¢æ•°æ®ï¼Œå®ƒä»…ä¸Žçƒ¦å¼•å½©è‰²å›¾åƒæœ‰å…»I¼Œè€Œä¸”è¦æ”¾åœ¨å›¾åƒæ•°æ®å—(image data chunk)之å‰ã€‚真彩色的PNG数残¹ä¹Ÿå¯ä»¥æœ‰è°ƒè‰²æ¿æ•°æ®å—,目的是便于éžçœŸå½©è‰²æ˜¾½Cºç¨‹åºç”¨å®ƒæ¥é‡åŒ–囑փ数æ®åQŒä»Žè€Œæ˜¾½Cø™¯¥å›‘Öƒã€‚è°ƒè‰²æ¿æ•°æ®å—结构如è¡?-09所½Cºã€?/font>
è¡?-09 è°ƒè‰²æ¿æ•°æ®å—¾l“æž„
域的åç§° |
å—节æ•?/p> |
说明 |
Red | 1 byte | 0 = 黑,255 = ¾U?/font> |
Green |
">
0 = 黑,255 = ¾l?/font> |
|
Blue | 1 byte | 0 = 黑,255 = �/font> |
 
调色æ¿å®žé™…是一个彩色烦引查找表åQŒå®ƒçš„表™åÒŽ•°ç›®å¯ä»¥æ˜¯1ï½?56ä¸çš„一个数åQŒæ¯ä¸ªè¡¨™åÒŽœ‰3å—节åQŒå› æ¤è°ƒè‰²æ¿æ•°æ®å—所包å«çš„æœ€å¤§å—节数ä¸?68ã€?/font>
(3) 囑փ数æ®å—IDAT(image data chunk)åQšå®ƒå˜å‚¨å®žé™…的数æ®ï¼Œåœ¨æ•°æ®æµä¸å¯åŒ…å«å¤šä¸ª˜qžç®‹™åºåºçš„å›¾åƒæ•°æ®å—ã€?/font>
(4) 囑փ¾l“æŸæ•°æ®IEND(image trailer chunk)åQšå®ƒç”¨æ¥æ ‡è®°PNGæ–‡äšgæˆ–è€…æ•°æ®æµå·²ç»¾l“æŸåQŒåƈ且必™å»è¦æ”‘Öœ¨æ–‡äšg的尾部ã€?/font>
除了表示数æ®å—开始的IHDR必须攑֜¨æœ€å‰é¢åQ?表示PNGæ–‡äšg¾l“æŸçš„IENDæ•°æ®å—放在最åŽé¢ä¹‹å¤–åQŒå…¶ä»–æ•°æ®å—çš„å˜æ”ùN¡ºåºæ²¡æœ‰é™åˆ¶ã€?/font>
2. 辅助数æ®å?/p>
PNGæ–‡äšgæ ¼å¼è§„范制定çš?0个辅助数æ®å—是:
(1) 背景颜色数æ®å—bKGD(background color)ã€?/font>
(2) åŸø™‰²å’Œç™½è‰²åº¦æ•°æ®å—cHRM(primary chromaticities and white point)。所谓白色度是指当RåQGåQBåQ最大值时在显½Cºå™¨ä¸Šäñ”生的白色度ã€?/font>
(3) 囑փ¾•æ•°æ®å—gAMA(image gamma)ã€?/font>
(4) 囑փ直方图数æ®å—hIST(image histogram)ã€?/font>
(5) 物ç†åƒç´ ž®ºå¯¸æ•°æ®å—pHYs(physical pixel dimensions)ã€?/font>
(6) æ ähœ¬æœ‰æ•ˆä½æ•°æ®å—sBIT(significant bits)ã€?/font>
(7) æ–‡æœ¬ä¿¡æ¯æ•°æ®å—tEXt(textual data)ã€?/font>
(8) 囑փ最åŽä¿®æ”ÒŽ—¶é—´æ•°æ®å—tIME (image last-modification time)ã€?/font>
(9) å›‘Öƒé€æ˜Žæ•°æ®å—tRNS (transparency)ã€?/font>
(10) 压羃文本数æ®å—zTXt (compressed textual data)ã€?/font>
3. æ•°æ®å—摘è¦?/p>
关键数æ®å—ã€è¾…助数æ®å—和专用公共数æ®å—(special-purpose public chunks)¾l¼åˆåœ¨è¡¨6-10ä¸ã€?/font>
è¡?-10 PNGæ–‡äšgæ ¼å¼ä¸çš„æ•°æ®å?/font>
æ•°æ®å—符å?/p> |
æ•°æ®å—å¿U?/p> |
多数æ®å— |
å¯é€‰å¦ |
ä½ç½®é™åˆ¶ |
||
IHDR | æ–‡äšg头数æ®å— |
å?/p> |
å?/p> |
½W¬ä¸€å?/font> | ||
cHRM | åŸø™‰²å’Œç™½è‰²ç‚¹æ•°æ®å?/font> |
å?/p> |
�/p> |
在PLTEå’ŒIDATä¹‹å‰ | ||
gAMA | 囑փ¾•æ•°æ®å?/font> |
å?/p> |
�/p> |
在PLTEå’ŒIDATä¹‹å‰ | ||
sBIT | æ ähœ¬æœ‰æ•ˆä½æ•°æ®å— |
å?/p> |
�/p> |
在PLTEå’ŒIDATä¹‹å‰ | ||
PLTE | è°ƒè‰²æ¿æ•°æ®å— |
å?/p> |
�/p> |
在IDATä¹‹å‰ | ||
bKGD | 背景颜色数æ®å?/font> |
å?/p> |
�/p> |
在PLTE之åŽIDATä¹‹å‰ | ||
hIST | 囑փ直方图数æ®å— |
å?/p> |
�/p> |
在PLTE之åŽIDATä¹‹å‰ | ||
tRNS | å›‘Öƒé€æ˜Žæ•°æ®å?/font> |
å?/p> |
�/p> |
在PLTE之åŽIDATä¹‹å‰ | ||
oFFs | (专用公共数æ®å? |
å?/p> |
�/p> |
在IDATä¹‹å‰ | ||
pHYs | 物ç†åƒç´ ž®ºå¯¸æ•°æ®å?/font> |
å?/p> |
�/p> |
在IDATä¹‹å‰ | ||
sCAL | (专用公共数æ®å? |
å?/p> |
�/p> |
在IDATä¹‹å‰ | ||
IDAT | 囑փ数æ®å?/font> |
�/p> |
å?/p> |
与其他IDAT˜qžç®‹ | ||
tIME | 囑փ最åŽä¿®æ”ÒŽ—¶é—´æ•°æ®å— |
å?/p> |
�/p> |
æ— é™åˆ?/font> | ||
tEXt | æ–‡æœ¬ä¿¡æ¯æ•°æ®å?/font> |
�/p> |
�/p> |
æ— é™åˆ?/font> | ||
zTXt | 压羃文本数æ®å?/font> |
�/p> |
�/p> |
æ— é™åˆ?/font> | ||
fRAc | (专用公共数æ®å? |
�/p> |
�/p> |
æ— é™åˆ?/font> | ||
gIFg | (专用公共数æ®å? |
�/p> |
�/p> |
æ— é™åˆ?/font> | ||
gIFt | (专用公共数æ®å? |
�/p> |
�/p> |
æ— é™åˆ?/font> | ||
gIFx | (专用公共数æ®å? |
�/p> |
�/p> |
æ— é™åˆ?/font> | ||
IEND | 囑փ¾l“æŸæ•°æ® |
å?/p> |
å?/p> |
最åŽä¸€ä¸ªæ•°æ®å— |
 
tEXtå’ŒzTXtæ•°æ®å—ä¸çš„æ ‡å‡†å…³é”®å—åQ?/p>
Title |
囑փåç§°æˆ–è€…æ ‡é¢?/p> |
Author |
囑փ作者å |
Description |
囑փ说明 |
Copyright |
版æƒå£°æ˜Ž |
CreationTime |
原图创作旉™—´ |
Software |
创作囑փ使用的èÊYä»?/p> |
Disclaimer |
å¼ƒæƒ |
Warning |
囑փ内容è¦å‘Š |
Source |
创作囑փ使用的设�/p> |
Comment |
å„ç§æ³¨é‡Š |
Type | Description | |
Character | æ–‡äšg¾cÕdž‹åQŒé€šå¸¸æ˜¯BMå¼€å¤?/td> | |
32-bit Int | æ–‡äšg大å°åQŒå•ä½byte | |
16-bit Int | ä¿ç•™ | |
16-bit Int | ä¿ç•™ | |
32-bit Int | ä½å›¾å†…容(A.4)开始的å—节åç§» |
Type | Description | |
32-bit Int | ä¿¡æ¯å¤´çš„大å°(å—节æ•? | |
32-bit Int | ä½å›¾çš„宽度(å¦?024åƒç´ åQ?/td> | |
32-bit Int | ä½å›¾çš„高åº?å¦?68åƒç´ ) | |
16-bit Int | Number of bitplanes (should be 1) | |
16-bit Int | 用多ž®‘个ä½åŽ»æè¿°ä¸€ä¸ªåƒç´?1, 4, 8, or 24) | |
32-bit Int | 使用的压¾~©ç±»åž?/td> | |
32-bit Int | 如果使用了压¾~©ï¼Œéœ€è¦æŒ‡å®šä½å›„¡š„å®žé™…å¤§å° | |
32-bit Int | æ¯ç±³çš„æ°´òq›_ƒç´ 的数é‡(用于攑֤§¾~©å°) | |
32-bit Int | æ¯ç±³çš„垂直åƒç´ 的数é‡(用于攑֤§¾~©å°) | |
32-bit Int | 实际用到的颜色数�/td> | |
32-bit Int | 较é‡è¦é¢œè‰²çš„æ•°é‡åQˆç”¨äºŽå‡ž®‘颜色数åQ?/td> |