cru*_*her 5 format png file-format
这是用 Gimp 制作的黑色 1x1 PNG 的十六进制转储,并以最少的信息导出:
89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52
00 00 00 01 00 00 00 01 08 02 00 00 00 90 77 53
DE 00 00 00 0C 49 44 41 54 08 D7 63 60 60 60 00
00 00 04 00 01 27 34 27 0A 00 00 00 00 49 45 4E
44 AE 42 60 82
Run Code Online (Sandbox Code Playgroud)
现在,在阅读规范后,我非常确定其中大多数的含义,除了 IHDR 和 IDAT 块之间的字节 30-34:90 77 53 DE
有人可以启发我吗?
这些数字是前一个块的 CRC 校验和。请参阅官方规范:5 Datastream 结构的总体概述,特别是5.3 Chunk 布局。
计算 CRC 并将其附加到每个单独的块:
根据块中前面的字节计算的四字节 CRC(循环冗余码),包括块类型字段和块数据字段,但不包括长度字段。CRC 可用于检查数据是否损坏。CRC 始终存在,即使对于不包含数据的块也是如此。
这是您的 1x1 像素图像,逐字节注释。紧接着每个块的数据IHDR
、IDAT
、 和 的IEND
是前面数据的 CRC。
File: test.png
89 50 4E 47 0D 0A 1A 0A
Header 0x89 "PNG" CR LF ^Z LF checks out okay
===========
00 00 00 0D
49 48 44 52
00 00 00 01 00 00 00 01 08 02 00 00 00
90 77 53 DE
block: "IHDR", 13 bytes [49484452]
Width: 1
Height: 1
Bit depth: 8
Color type: 2 = Color
(Bits per pixel: 8)
(Bytes per pixel: 3)
Compression method: 0
Filter method: 0
Interlace method: 0 (none)
CRC: 907753DE
===========
00 00 00 0C
49 44 41 54
08 D7 63 60 60 60 00 00 00 04 00 01
27 34 27 0A
block: "IDAT", 12 bytes [49444154]
expanded result: 4 (as expected)
(Row 0 Filter:0)
decompresses into
00 00 00 00
CRC: 2734270A
===========
00 00 00 00
49 45 4E 44
AE 42 60 82
block: "IEND", 0 bytes [49454E44]
CRC: AE426082
Run Code Online (Sandbox Code Playgroud)
数据IDAT
解压缩为四个 0:第一个是行过滤器(0,表示“无”),接下来的 3 个字节是单个像素的红、绿、蓝值。
归档时间: |
|
查看次数: |
4724 次 |
最近记录: |