我正在尝试从数据流中提取 PNG 图像的大小
考虑流的起始数据
137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 2 84 0 0 3 74 8 2 0 0 0 195 81 71 33 0 0 0 ...
^ ^ ^ ^ ^ ^
其中包含以下信息
- 签名:
137 80 78 71 13 10 26 10
- IHDR块:
- 长度
0 0 0 13
- 类型
73 72 68 82
- 数据
0 0 2 84 0 0 3 74 8 2 0 0 0
- CRC:
195 81 71 33
- 长度
- 然后一个新的块开始。
有关图像大小的信息被编码在数据块的 8 个字节中:
- 宽度
0 0 2 84
或字节b'\x00\x00\x02T'
- 高度
0 0 3 74
或以字节为单位b'\x00\x00\x03J'
。
我知道图像的宽度为596
px,高度为842
px,但我不知道如何计算图像的实际大小。
PS 这些值是用Python给出的,这里的数据流是二进制形式的
b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x02T\x00\x00\x03J\x08\x02\x00\x00\x00\xc3QG!\x00\x00\x00\tpHY'
您可以将每个字节视为相应维度的 256 基数数字。因此 0 * 256^3 + 0 * 256^2 + 2 * 256 + 84 = 596,而 0 * 256^3 + 0 * 256^2 + 3 * 256 + 74 = 842。
接下来的两个字节也很重要,其中 8 是位深度,2 是颜色类型。8 表示每个组件 8 位,2 表示每个像素三个组件:红色、绿色和蓝色。