png檔架構大概是
png標誌 + 很多數據塊
89 50 4E 47 0D 0A 1A 0A <--這就是PNG的署名
數據塊的結構:
length(4 bytes)、數據塊類型(4 bytes)、數據塊資料(可變動)、CRC(循環冗餘檢測)(4 bytes)
數據塊(大概講幾個比較常見的):
1.文件頭數據塊,IHDR(header chunk),13 bytes,包含以下內容:
Width(4 bytes)、Height(4 bytes)、Bit depth(1 bytes)、ColorType(1 bytes)、Compression method(1 bytes)、Filter method(1 bytes)、Interlace method(1 bytes)
2.圖像資料塊,IDAT(image data chunk),長度隨檔案大小有所改變,包含以下內容:
儲存實際圖像資料(可能有壓縮,所以不一定可讀)
3.圖像結束資料,IEND(image trailer chunk),12 bytes
00 00 00 00 49 45 4E 44 AE 42 60 82 (沒錯他就是長這樣而已)
解題的步驟:
1.先下載UltraEdit跟題目圖片
2.圖片用UltraEdit開啟
3.然後請參考下面
89 50 4E 47 0D 0A 1A 0A <--PNG署名
00 00 00 0D<--IHDR長度
//IHDR
49 48 44 52 <--IHDR(header chunk) 檔案頭資料塊
00 00 00 04 <--Width
00 00 00 04 <--Height
08 <--Bit depth
06 <--ColorType
00 <--Compression method
00 <--Filter method
00 <--Interlace method
A9 F1 9E 7E <--CRC校驗
00 00 00 4F <--資料長度
//IDAT
49 44 41 54 <--IDAT標識
08 99 01 44 00 BB FF<--I don't know what it is
E2 89..71 70 <--DATA
FF 87 B3 27 71 FE <--I don't know what it is
FE 33 AA A0<--CRC校驗
00 00 00 00 <--IEND length
//IEND
49 45 4E 44 <--IEND
AE 42 60 82 <--CRC校驗
4.把DATA裡的16進制全轉成10進制即是答案
如果無法理解上面說明的朋友,
也可以用 vb 或 c# 放一個 picture
把圖片載入後,用迴圈把值 dump 出來。
給大家參考。