一、PNG文件简介
PNG(Portable Network Graphics)即便携式网络图形,是一种采用无损压缩算法的位图片形格式,其设计目的是试图代替GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性。PNG使用从LZ77派生的无损数据压缩算法,一般应用于JAVA程序、网页或S60程序中,原因是它压缩比较高,生成文件体积小。
二、PNG文件的特性
1.体积小,网络通讯中因受带宽制约,在保证图片清晰、逼真的前提下,网页中不可能大范围的使用文件较大的bmp格式文件。
2.无损压缩,PNG文件采用LZ77算法的派生算法进行压缩,其结果是获得高的压缩比,不损失数据。它利用特殊的编码方法标记重复出现的数据,因而对图像的颜色没有影响,也不可能产生颜色的损失,这样就可以重复保存而不降低图像质量。
3.索引彩色模式,PNG-8格式与GIF图像类似,同样采用8位调色板将RGB彩色图像转换为索引彩色图像。图像中保存的不再是各个像素的彩色信息,而是从图像中挑选出来的具有代表性的颜色编号,每一编号对应一种颜色,图像的数据量也因此减少,这对彩色图像的传播非常有利。
4.更优化的网络传输显示,PNG图像在浏览器上采用流式浏览,即使经过交错处理的图像会在完全下载之前提供浏览者一个基本的图像内容,然后再逐渐清晰起来。它允许连续读出和写入图像数据,这个特性很适合于在通信过程中显示和生成图像。
5.支持透明效果,PNG可以为原图像定义256个透明层次,使得彩色图像的边缘能与任何背景平滑地融合,从而彻底地消除锯齿边缘。这种功能是GIF和JPEG没有的。
6.PNG同时还支持真彩和灰度级图像的Alpha通道透明度。最高支持24位真彩色图像以及8位灰度图像。支持Alpha通道的透明/半透明特性。支持图像亮度的Gamma校准信息。支持存储附加文本信息,以保留图像名称、作者、版权、创作时间、注释等信息。
三、PNG文件结构
PNG图象格式文件(或者称为数据流)由一个8字节的PNG文件署名(PNG file signature)域和按照特定结构组织的3个以上的数据块(chunk)组成。
1、PNG文件署名
PNG文件署名由8个固定字节组成,是一个PNG文件的标识。
十进制 | 137 80 78 71 13 10 26 10 |
十六进制 | 89 50 4E 47 0D 0A 1A 0A |
2、数据块
PNG文件定义了两种类型的数据块,分别是关键数据块和辅助数据块。其中关键数据属于必须的数据块,定义了4个标准数据块,即文件头数据块(IHDR)、调色板数据块(PLTE)、图像数据块(IDAT)和图像结束数据(IEND),而辅助数据块属于可选的数据块,包含了一些数据块辅助信息。
数据块名称 | 允许多 个数据块 |
位 置 |
文件头数据块(IHDR) | 不允许 | 第一个数据块 |
调色板数据块(PLTE) | 不允许 | 第二个数据块,可选 |
图像数据块(IDAT) | 允许 | 如果有调色板数据块(PLTE),则是第三个数据块,如果没有调色板数据块(PLTE),则时第二个数据块。如果有多个图像数据块,则必须按图像数据连续存储 |
图像结束数据(IEND) | 不允许 | 最后一个数据块 |
每个数据块格式相同,由以下4个部分组成:
名称 | 字节数 | 说明 |
Length (长度) | 4字节 | 指定数据块中数据域的长度,其长度不超过(231-1)字节 |
Chunk Type Code (数据块类型码) | 4字节 | 数据块类型码由ASCII字母(A-Z和a-z)组成 |
Chunk Data (数据块数据) | 可变长度 | 存储按照Chunk Type Code指定的数据 |
CRC (循环冗余检测) | 4字节 | 存储用来检测是否有错误的循环冗余码 |
四、实例分析
利用FlexHEX分析以下PNG格式文件:
1、PNG文件头
2、数据块
(1)文件头数据块(IHDR)
值 | 含义 | 说明 |
00 00 00 0D | 长度 | 13字节 |
49 48 44 52 | 标识数据块类型 | 文件头数据块标识 |
00 00 03 78 | 宽 | 888个像素点 |
00 00 03 A8 | 高 | 936个像素点 |
08 | 比特深度 | 256色图像 |
02 | 颜色类型 | 真彩色图像 |
00 | 压缩方法 | 目前均为0 |
00 | 滤波 | 目前均为0 |
00 | 扫描方式 | 非隔行扫描 |
0C 32 C1 36 | CRC校验码 | 循环冗余 |
(2)辅助数据块
值 | 含义 | 说明 |
00 00 00 09 | 长度 | 9字节 |
70 48 59 73 | 标识数据块类型 | 辅助数据块标识 |
00 9A 9C 18 | CRC校验码 | 循环冗余 |
(3)调色板数据块(PLTE)
该数据块属于可选数据块,在本示例当中未包含本数据块
(4)图像数据块(IDAT)
值 | 含义 | 说明 |
00 00 20 00 | 长度 | 8192字节 |
49 44 41 54 | 标识数据块类型 | 图像数据块标识 |
(5)图像结束数据(IEND)
该数据块未图像结束的标识,固定未00 00 00 49 45 4E 44 AE 42 60 82