PNG truecolor,8位深度,如何读取IDAT块

时间:2016-08-18 13:31:20

标签: colors png rgb

我有一个关于我正在尝试阅读的PNG文件的问题(我在此问题中附上了它)enter image description here

文件大小为328750字节 宽度660 高度330 颜色类型 - truecolor 位深度 - 24位

所以这是我的问题。如果它是真彩色,我认为它是RGB,即24位。但你做数学,数字不加起来。 660(宽度)* 330(高度)* 3个字节(从24位)= 653400字节,这是实际文件大小的两倍。

为什么?

我试图读取IDAT块,假装每个像素是3个字节,我试图检查颜色,它与显示的不匹配。

1 个答案:

答案 0 :(得分:0)

PNG是一种压缩图像格式,因此IDAT块包含RGB像素的zlib压缩表示。您访问像素数据的最简单方法可能是使用ImageMagick或GraphicsMagick等转换器将图像解压缩到Netpbm" PPM"格式。

 magick image.png image.ppm

 gm convert image.png image.ppm

然后阅读" image.ppm"就像你试图阅读PNG一样。只需跳过短标题,如果您的图像是

P   6  \n   6   6   0       3   3   0  \n   2   5   5  \n

其中" P6"是幻数,660和330是尺寸,255是图像深度(R,G和B的最大值是255或0xff)。文件的其余部分只是您期望的R,G,B值。