PNG文件結構分析之一(了解PNG文件存儲格式)
8字節 → PNG文件頭(固定)
再往后就是第一個數據塊:數據塊由4字節的數據域長度,4字節的類型碼,指定長度(前面提到的數據域長度,這里IHDR就是0x0D個字節也即13字節)的數據,和4字節的CRC碼組成。
而IHDR的組成為:4字節寬度,4字節高度,1字節位深度,1字節顏色類型,1字節壓縮方法,1字節濾波方法,1字節隔行掃描方法。
- 00 00 00 0D 說明IHDR頭塊長為13
- 49 48 44 52 IHDR標識
- 00 00 00 08 圖像的寬,8像素
- 00 00 00 08 圖像的高,8像素
- 04 色深,2^4=16,即這是一個16色的圖像(也有可能顏色數不超過16,當然,如果顏色數不超過8,用03表示更合適)
- 03 顏色類型,索引圖像
- 00 PNG Spec規定此處總為0(非0值為將來使用更好的壓縮方法預留),表示使壓縮方法(LZ77派生算法)
- 00 同上
- 00 非隔行掃描
- 36 21 A3 B8 CRC校驗碼
CRC就是對類型碼和數據域進行計算得到的
-------------------------
(固定)8個字節 89 50 4E 47 0D 0A 1A 0A 為 png的文件頭
(固定)4個字節 00 00 00 0D (即為十進制的13)代表數據塊的長度為13
(固定)4個字節 49 48 44 52 (即為ASCII碼的IHDR)是文件頭數據塊的標示(IDCH)
(可變) 13位數據塊(IHDR)
前四個字節代表該圖片的寬 00 00 00 08
后四個字節代表該圖片的高 00 00 00 08
后五個字節依次為: Bit depth、ColorType、 Compression method、 Filter method、Interlace method
(可變)剩余四字節為該png的CRC檢驗碼 36 21 A3 B8,由從IDCH到THDR的十七位字 節進行crc計算得到。