PNG图像文件格式解析 您所在的位置:网站首页 1129396415_16774623488991n.png PNG图像文件格式解析

PNG图像文件格式解析

2023-08-17 06:59| 来源: 网络整理| 查看: 265

一、实验要求

使用 FlexHEX 对 png 图片文件进行格式解析并分析

使用图片: 在这里插入图片描述 在这里插入图片描述

二、背景介绍 PNG是20世纪90年代中期开始开发的图像文件存储格式,是一种采用无损压缩算法的位图格式,其目的是企图替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性。PNG用来存储灰度图像时,灰度图像的深度可多到16位,存储彩色图像时,彩色图像的深度可多到48位,并且还可存储多到16位的α通道数据。PNG使用从LZ77派生的无损数据压缩算法。PNG图像格式文件(或者称为数据流)由一个8字节的PNG文件署名(PNG file signature)域和按照特定结构组织的3个以上的数据块(chunk)组成。 三、文件组织方式及分析 1.PNG文件署名域

8字节的PNG文件署名域用来识别该文件是不是PNG文件。 一个PNG文件其文件头总是由位固定的字节来描述的。 该域的值是:

十进制数十六进制数137898050784e7147130d100a261a100a

可以看到前八个字节的确如上表所示,表明此图片确实为 PNG 格式 在这里插入图片描述

2.数据块的结构 数据块结构分为关键数据块和辅助数据块,每个数据块结构都由下表所示的的4个域组成: 名称字节数说明Length(长度)4字节指定数据块中数据域的长度,其长度不超过(231-1)字节Chunk Type Code(数据块类型码)4字节数据块类型码由ASCII字母(A-Z和a-z)组成Chunk Data(数据块数据)可变长度存储按照Chunk Type Code指定的数据CRC(循环冗余检测)4字节存储用来检测是否有错误的循环冗余码

1) 关键数据块

关键数据块中的4个标准数据块是:

文件头数据块IHDR(header chunk):它包含有PNG文件中存储的图像数据的基本信息,并要作为第一个数据块出现在PNG数据流中,而且一个PNG数据流中只能有一个文件头数据块。

文件头数据块由13字节组成,它的格式如图所示。 在这里插入图片描述 图片分析如下:

名称长度图片说明Length4字节在这里插入图片描述长度为0x0D,13正好是IHDR的长度Chunk Type Code4字节在这里插入图片描述是IHDR的数据块Width4字节在这里插入图片描述宽度是0x1405,即5125像素Height4字节在这里插入图片描述高度是0x1F04,即7940像素Bit depth1字节在这里插入图片描述图像深度是8位ColorType1字节在这里插入图片描述颜色类型是0x06,即带α通道数据的真彩色图像Compression method1字节在这里插入图片描述是0x00,即无压缩Filter method1字节在这里插入图片描述是0x00,即无滤波Interlace method1字节在这里插入图片描述是0x00,即非隔行扫描CRC4字节在这里插入图片描述循环冗余码 调色板数据块PLTE(palette chunk):它包含有与索引彩色图像((indexed-color image))相关的彩色变换数据,它仅与索引彩色图像有关,而且要放在图像数据块(image data chunk)之前。真彩色的PNG数据流也可以有调色板数据块,目的是便于非真彩色显示程序用它来量化图像数据,从而显示该图像。

调色板数据块结构如图所示: 在这里插入图片描述 调色板实际是一个彩色索引查找表,它的表项数目可以是1~256中的一个数,每个表项有3字节,因此调色板数据块所包含的最大字节数为768。

本例是带α通道数据的真彩色图像,没有调色板数据块

图像数据块IDAT(image data chunk):它存储实际的数据,在数据流中可包含多个连续顺序的图像数据块。图像结束数据IEND(image trailer chunk):它用来标记PNG文件或者数据流已经结束,并且必须要放在文件的尾部。00 00 00 00 49 45 4E 44 AE 42 60 82 分析可以看到的确一致在这里插入图片描述 除了表示数据块开始的IHDR必须放在最前面, 表示PNG文件结束的IEND数据块放在最后面之外,其他数据块的存放顺序没有限制

2)辅助数据块

PNG文件格式规范制定的10个辅助数据块是:

(1) 背景颜色数据块bKGD(background color)。 (2) 基色和白色度数据块cHRM(primary chromaticities and white point)。所谓白色度是指当R=G=B=最大值时在显示器上产生的白色度。 (3) 图像γ数据块gAMA(image gamma)。 (4) 图像直方图数据块hIST(image histogram)。 (5) 物理像素尺寸数据块pHYs(physical pixel dimensions)。 (6) 样本有效位数据块sBIT(significant bits)。 (7) 文本信息数据块tEXt(textual data)。 (8) 图像最后修改时间数据块tIME (image last-modification time)。 (9) 图像透明数据块tRNS (transparency)。 (10) 压缩文本数据块zTXt (compressed textual data)。

PNG文件格式中的数据块: 在这里插入图片描述 3) sRGB数据块

名称字节说明Rendering intent10:Perceptual 适用于喜欢以输出色域为佳,而以色度精度为代价的图像,例如照片。1:Relative colorimetric 用于需要颜色外观匹配的图像。2:Saturation 适用于希望保留饱和度但以色相和亮度为代价的图像,例如图表和图形。3:Absolute colorimetric 用于需要保留绝对色度的图像,例如用于其他输出设备的图像预览(校样)。

此处更换了第二张图片进行实验

可以看到数值为1,是sRGB形式 在这里插入图片描述 Rendering intent 部分的数值为0,则适用于喜欢以输出色域为佳,而以色度精度为代价的图像,例如照片。 在这里插入图片描述

4) Gama 和 cHEM 数据块 通常在sRGB 的后面同时写入gAMA数据块(有时候也会有cHRM数据块),为了使得一些不能正确解码sRGB数据块的PNG解码器正确解码。跟在sRGB数据块后面的gAMA数据块和cHRM的正确写法应该如下表所示:

GamaGama45455cHRMWhite point x31270White point y32900Red x64000Red y33000Green x30000Green y60000Blue x15000Blue y6000

实验二进制如下:

名称长度图片说明Length4字节在这里插入图片描述符合gAMA数据块标准Chunk Type Code4字节在这里插入图片描述标志gAMA数据块Data4字节在这里插入图片描述CRC4字节在这里插入图片描述循环冗余校验码

5) pHYs 数据块

此数据块可表示物理分辨率

pHYs块的Chunk data由三部分构成:

名称字节数说明Pixeis per unit,X axis4-----Pixeis per unit,Y axis4-----Unit specifier10: 单位未知1:单位为米

打开二进制文件

名称长度图片说明Length4字节在这里插入图片描述9个字节,符合pHYs数据块标准Chunk Type Code4字节在这里插入图片描述标志pHYs数据块X axis4字节在这里插入图片描述0x2516Y axis4字节在这里插入图片描述0x2516Unit specifier1字节在这里插入图片描述1: unit is the metreCRC4字节在这里插入图片描述循环冗余校验码


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有