PNG文件格式分析

目录

 

1.实验目的:

2.文件格式简要介绍:

3.主要特性:

4.文件格式:

5.具体分析:使用FlexHEX以二进制形式打开文件

6.实验总结与感想:


1.实验目的:

因为PNG图像格式十分常见,因此选择将老师下发的文件转换为.png格式来进行具体分析。学习PNG文件的格式,探究这样设计的原因,分析其灵活性以及可扩展性。

2.文件格式简要介绍:

PNG是20世纪90年代中期开始开发的图像文件存储格式,其目的是企图替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性。流式网络图形格式(Portable Network Graphic Format,PNG)名称来源于非官方的“PNG's Not GIF”,是一种位图文件(bitmap file)存储格式,读成“ping”。PNG用来存储灰度图像时,灰度图像的深度可多到16位,存储彩色图像时,彩色图像的深度可多到48位,并且还可存储多到16位的α通道数据。PNG使用从LZ77派生的无损数据压缩算法。

3.主要特性:

使用彩色查找表或者叫做调色板可支持256种颜色的彩色图像。

流式读/写性能(streamability):图像文件格式允许连续读出和写入图像数据,这个特性很适合于在通信过程中生成和显示图像。

逐次逼近显示(progressive display):这种特性可使在通信链路上传输图像文件的同时就在终端上显示图像,把整个轮廓显示出来之后逐步显示图像的细节,也就是先用低分辨率显示图像,然后逐步提高它的分辨率。

透明性(transparency):这个性能可使图像中某些部分不显示出来,用来创建一些有特色的图像。  

独立于计算机软硬件环境。 使用无损压缩。每个像素为48位的真彩色图像。 每个像素为16位的灰度图像。 可为灰度图和真彩色图添加α通道。 添加图像的γ信息。

使用循环冗余码(cyclic redundancy code,CRC)检测损害的文件。 加快图像显示的逐次逼近显示方式。 标准的读/写工具包。 可在一个文件中存储多幅图像。

4.文件格式:

PNG图像格式文件(或者称为数据流)由一个8字节的PNG文件署名(PNG file signature)域和按照特定结构组织的3个以上的数据块(chunk)组成。

PNG定义了两种类型的数据块,一种是称为关键数据块(critical chunk),这是标准的数据块,另一种叫做辅助数据块(ancillary chunks),这是可选的数据块。关键数据块定义了4个标准数据块,每个PNG文件都必须包含它们,PNG读写软件也都必须要支持这些数据块。虽然PNG文件规范没有要求PNG编译码器对可选数据块进行编码和译码,但规范提倡支持可选数据块。

(1)PNG文件署名域:

8字节的PNG文件署名域用来识别该文件是不是PNG文件。该域的值是:

十进制数

137 80 78 71 13 10 26 10

十六进制数

89  50 4e 47 0d 0a 1a 0a

(2)数据块结构:

PNG文件格式分析_第1张图片

(3)关键数据块:保含4个标准数据块

文件头数据块IHDR(header chunk):

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

文件头数据块由13字节组成,它的格式如表6-08所示。

PNG文件格式分析_第2张图片

调色板数据块PLTE(palette chunk):它包含有与索引彩色图像((indexed-color image))相关的彩色变换数据,它仅与索引彩色图像有关,而且要放在图像数据块(image data chunk)之前。真彩色的PNG数据流也可以有调色板数据块,目的是便于非真彩色显示程序用它来量化图像数据,从而显示该图像。

 图像数据块IDAT(image data chunk):它存储实际的数据,在数据流中可包含多个连续顺序的图像数据块。

图像结束数据IEND(image trailer chunk):它用来标记PNG文件或者数据流已经结束,并且必须要放在文件的尾部。除了表示数据块开始的IHDR必须放在最前面, 表示PNG文件结束的IEND数据块放在最后面之外,其他数据块的存放顺序没有限制。

(4)辅助数据块(10个)

PNG文件格式分析_第3张图片

5.具体分析:使用FlexHEX以二进制形式打开文件

(1)首先,选中的头8个字节即为PNG文件的固定标识。

2)IHDR数据块:

00 00 00 0D 说明IHDR头块长为13

·49 48 44 52  IHDR标识

·00 00 00 1F 图像的宽,31像素

·00 00 00 1F 图像的高,31像素

·08 色深,2^8=256,即这是一个256色的图像

·03 颜色类型,索引图像

·00 PNG Spec规定此处总为0(非0值为将来使用更好的压缩方法预留),表示使压缩方法(LZ77派生算法)

·00 同上

·00 非隔行扫描

·28 70 E6 0B CRC校验

(3)gAMA图像y数据块:

 

 

(4)cHRM基色和白色点数据块:

PNG文件格式分析_第4张图片

 

5)PLTE调色板数据块:

PNG文件格式分析_第5张图片

 

PLTE数据块是定义图像的调色板信息,PLTE可以包含1~256个调色板信息,每一个调色板信息由3个字节组成:

 

因此,调色板的长度应该是3的倍数,否则,这将是一个非法的调色板。

对于索引图像,调色板信息是必须的,调色板的颜色索引从0开始编号,然后是1、2……,调色板的颜色数不能超过色深中规定的颜色数(如图像色深为4的时候,调色板中的颜色数不可以超过2^4=16),否则,这将导致PNG图像不合法。 由实例可知:色深为8,则颜色数不超过2^8=256,而调色板长度为12*16=192=3*64,是3的倍数,64个颜色数!

66 66 66 40 颜色0;40 40 00 颜色1……

另外,真彩色图像和带alpha通道数据的真彩色图像也可以有调色板数据块,目的是便于非真彩色显示程序用它来量化图像数据,从而显示该图像。

(6)bKGD背景颜色数据块:

 

(7)pHYs物理像素尺寸数据块:

 

(8)tIME图像最后修改时间数据块:

 

9)IDAT图像数据块:

PNG文件格式分析_第6张图片

PNG文件格式分析_第7张图片

 

 

00 00 01 CC 数据长为39字节

49 44 41 54 IDAT标识

28 CF…… 压缩的数据

38 D7 99 AB CRC校验

(10)tEXt文本信息数据块:(有两个)

 

 

 

(11)IEND图像结束数据:

 

6.实验总结与感想:

1.PNG格式与BMP格式都有说明文件的信息,描述图像内容的数据,调色板。由于PNG中规定除关键数据块外,其它的辅助数据块都为可选部分,因此,有了这个标准后,我们可以通过删除所有的辅助数据块来减少PNG文件的大小。

2.JPG、GIF、PNG和BMP优缺点:

优点

JPG:

JPEG图片格式的设计目标,是在不影响人类可分辨的图片质量的前提下,尽可能的压缩文件大小。这意味着JPEG去掉了一部分图片的原始信息,也即是进行了有损压缩。 

JPEG的图片的优点,是采用了直接色,得益于更丰富的色彩,JPEG非常适合用来存储照片,用来表达更生动的图像效果,比如颜色渐变。

GIF:GIF是无损的,采用GIF格式保存图片不会降低图片质量。但得益于数据的压缩,GIF格式的图片,其文件大小要远小于BMP格式的图片。文件小,是GIF格式的优点,同时,GIF格式还具有支持动画以及透明的优点。

PNG:PNG是一种比较新的图片格式,PNG-8是非常好的GIF格式替代者,在可能的情况下,应该尽可能的使用PNG-8而不是GIF,因为在相同的图片效果下,PNG-8具有更小的文件体积。

BMP:这是一种比较老的图片格式。BMP是无损的,但同时这种图片格式几乎没有对数据进行压缩,所以BMP格式的图片通常具有较大的文件大小。虽然同时支持索引色和直接色是一个优点

缺点

JPG:与GIF相比,JPEG不适合用来存储企业Logo、线框类的图。因为有损压缩会导致图片模糊,而直接色的选用,又会导致图片文件较GIF更大。

GIF:GIF格式仅支持8bit的索引色,即在整个图片中,只能存在256种不同的颜色。

PNG:PNG-8本身也是支持动画的,只是浏览器支持得不好,不像GIF那样受到广泛的支持。

BMP:太大的文件格式格式导致它几乎没有用武之地,现在除了在Windows操作系统中还比较常见之外,几乎看不到它。

参考资料:

https://blog.csdn.net/qq_21950929/article/details/79198814?ops_request_misc=&request_id=&biz_id=102&utm_term=png%E6%96%87%E4%BB%B6%E7%BB%93%E6%9E%84%E8%A7%A3%E6%9E%90&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-79198814.first_rank_v2_pc_rank_v29

 

你可能感兴趣的:(数据压缩作业)