一.PNG图像格式简介
PNG是一种无损压缩的、易传输的光栅图像文件格式, 设计目的是用来替代GIF和TIFF文件格式, 并增加一些这两种所不具有的文件特性.PNG图像文件是现在网络、媒体、游戏中最常用的文件格式之一。相比BMP格式文件, PNG格式文件显得更复杂些.它支持灰度图像、索引彩色图像和真彩图像, 并且支持额外的α通道.采样的深度范围是从1位到16位.采用的压缩算法是LZ77派生的无损数据压缩算法
二.PNG文件结构
PNG文件由文件署名域(8字节)和数据块(Chunk)组成,文件署名域用来判断识别该文件是不是PNG文件,PNG包含两种类型的数据块, 一种叫关键数据块, 有4种.在每个PNG文件中都必须必须包含这四种数据块, 另一种叫做辅助数据块, 有14种。PNG文件中可以包含也可以不包含, 可以包含一种也可以同时包含多种.
文件头判断
| 00000000h | 89 | 50 | 4E | 47 | 0D | 0A | 1A | 0A |
三.每一个数据块的组成
Length:4字节, 块中数据的长度, 可以为0
Chunk Type Code (类型码) :4字节, 取值范围65~90和97~122
Chunk Data (数据块数据) :可变, 数据段
CRC:4字节, 循环冗余校验码
常见数据块

四.下面打开一张png格式照片

文件头数据块IHDR组成

根据打开的码流,00 00 00 0D表示的是IHDR的大小
49 48 44 52 是Chunk Type Code
到了数据部分,00 00 05 A3表示的是图像的宽,宽1443个像素。00 00 03 BE表示的是图像的高,高958个像素。
08表示图像深度8bit
06表示带α通道数据的真彩色图像
00表示仅支持压缩方式0
00滤波器方法:5种方法都被支持
00:非隔行扫描
19 9B 09 1A:CRC循环冗余检测
SRGB数据块

00 00 00 01 数据长度为1
73 52 47 42 Chunk Type Code
00牺牲色度精度来更好地适应输出设备的图像,例如照片
AE CE 1C E9 :CRC码
物理像素尺寸数据块pHYs

| 名称 | 字节数 | 描述 |
| physPixelPerUnitX | 4 | 每单位多少像素,x轴 |
| physPixelPerUnitY | 4 | 每单位多少像素,y轴 |
| UnkownUnit,Meter | 1 |
枚举类型,UnkownUnit=0,表示只定义了像素显示的比例,未定义实际像素大小。 枚举类型,Meter=1,表示定义单位为米 |
故00 00 00 09:数据块大小9字节
70 48 59 73:Chunk Type Code
00 00 16 25 :x轴上每米5669个像素
00 00 16 25:x轴上每米5669个像素
01:Meter=1,将单位定义为米
49 52 24 F0:CRC码
gama数据块

00 00 00 04:gama数据块长度
67 41 4D 41:Chunk Type Code
00 00 B1 8F:gama矫正信息
0B FC 61 05:CRC码
图像数据结束IEND
用来标记PNG文件或者数据流已经结束,并且必须要放在文件的尾部。根据打开不同的PNG照片,最后十二位必然出现下面的图片,猜测IEND固定格式如下

00 00 00 00代表IEND数据长度
49 45 4E 44代表Chunk Type Code
AE 42 60 82代表CRC码
五.实验结果分析
通过本次实验,得知了分析图像文件的基本步骤。大致结构是什么可以弄懂,具体结构还要自己查阅相关文献。
本文介绍了PNG图像格式,包括其无损压缩特性、与BMP格式的对比、文件结构、数据块组成以及常见的关键数据块如IHDR、sRGB、pHYs和gAMA的详细解析。通过分析PNG文件,了解了图像文件的基本结构和分析步骤。

3348

被折叠的 条评论
为什么被折叠?



