png图片的文件存储格式

来源:互联网 发布:mysql utf 8 乱码 编辑:程序博客网 时间:2024/05/16 17:16

 

图形图像的位图格式—PNG格式

图形图像的位图格式—PNG格式

PNG是20世纪90年代中期形成的图像文件存储格式,其目的是企图代替GIF和TIFF文件格式,同时增加一些GIF文件格式所不具有的特性。开始时,并没有多少人知道,直到1996年10月1日由PNG向国际网络联盟(World Wide Web Consortiun)提出,并推荐认可标准,并且大部分绘图软件支持PNG这种格式。从此PNG图像格式生机焕发。PNG是一种无损压缩的位图文件。用来存储灰度图像时,灰度图像的深度可多到16位;存储彩色图像时,彩色图像的深度可多大48位;并且还可以存储多达16位的α通道数据。PNG使用从LZ77派生的无损数据压缩算法。因而,PNG文件的结构,特性以及未来引起人们的关注。

一.         PNG的文件结构

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

PNG定义了两种类型的数据块,一种是称为关键数据块(critical chunk),这是标准的数据块;另一种叫做辅助数据块(ancillary chunk),这是可选的数据块. 关键数据块定义了4个标准数据块,每个PNG文件都必须包含它们.

1.PNG文件署名域

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

十进制数13780787113102610

十六进制数89504e470d0a1a0a

2.数据块的结构

每个数据块都由表1所示的的4个域组成。

注:在表1中,CRC(cyclic redundancy check)域中的值是对Chunk Type Code域和Chunk Data域中的数据进行计算得到的。CRC具体算法定义在ISO3309和ITU-TV.42中,其值按下面的CRC码生成多项式进行计算:

x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1(x^n表示x的n次方)

1) 关键数据块

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

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

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

注:表2 PNG文件头数据块的结构

域的名称字节数说明

Width4bytes图像宽度:以像素为单位

Height4bytes图像高度:以像素为单位

Bitdepth1byte图像深度:

索引彩色图像,1,2,4或8

灰度图像,1,2,4,8或16

真彩色图像,8或16

ColorType1byte颜色类型:

0;灰度图像,1,2,4,8或16

2;真彩色图像,8或16

3;索引彩色图像,1,2,4或8

4;带α通道数据的灰度图像,8或16

6;带α通道数据的真彩色图像,8或16

Compression method 1 byte压缩方法(LZ77派生算法)

Filter method 1 byte滤波器方法

Interlace method 1 byte隔行扫描方法:

0;非隔行扫描

1;Adam7(由AdamM.Costello开发的7遍隔行扫描方法)

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

注:表3调色板数据块结构

域的名称字节数说明

Red1byte0=黑,255=红

Green>0=黑,255=绿

Blue1byte0=黑,255=蓝

 调色板实际是一个彩色索引查找表,它的表项数目可以是1~256中的一个数,每个表项有3字节,因此调色板数据块所包含的最大字节数为768。

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

(4)图像结束数据IEND(image trailer chunk):它用来标记PNG文件或者数据流已经结束,并且必须要放在文件的尾部。

除了表示数据块开始的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 lastmodification time)。

(9)图像透明数据块tRNS(transparency)。

(10)压缩文本数据块zTXt(compressed textual data)。

二.PNG的文件特性

一)PNG保留的特性:

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

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

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

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

  5、辅助信息(ancillary information):这个特性可用来在图像文件中存储一些文本注释信息。

  6、独立于计算机软硬件环境。

  7、使用无损压缩。

  二)PNG增加的特性:

  1、每个像素为48位的真彩色图像。

  2、每个像素为16位的灰度图像。

  3、可为灰度图和真彩色图添加α通道。

  4、添加图像的γ信息。

  5、使用循环冗余码(cyclic redundancy code,CRC)检测损害的文件。

  6、加快图像显示的逐次逼近显示方式。

  7、标准的读/写工具包。

  8、可在一个文件中存储多幅图像。

三)PNG的优点:

1.图像压缩方面

  在图像处理中,位图图像的压缩分为无损压缩和有损压缩两大类。PNG属于无损压缩一类;因而,最后保存下来的图像,其大小会因为压缩而减小,但图像的质量却不会因为压缩而缺损。

2.色彩丰富程度

  PNG支持所有色彩类型,更可以提供64位/像素的高品质图像形式。所以,在色彩选择上有更大的适用性。

3.制作透明图像

  PNG有支持alpha透明的属性。它能提供创作者指定透明色和透明区域的选择性透明。

4.平台适用性

  目前的电脑使用的平台大部分为PC和MAC。而这两个平台在色彩显示上是有区别的,因而,图像很容易在平台间形成差别——例如,在PC上显得太暗而在MAC上显得太亮。PNG允许了计算机自动使用gamma色彩修正来修正图像的显示,这样在不同的平台,可以根据应用程序的需要显示出适合的图像,这为跨平台的网页图像提供了较好的解决方案。

5.远程协作

  PNG保留了图像的层属性,因而可以很方便的进行网络远程协作维护。使用PNG,只要用编辑器打开当前的图像后,就可以很方便的进行修改了。总的来说,PNG并不仅仅是一个可应用于图像扫描和编辑中介的格式,更是一个非常适合网络传输和应用的图像格式。PNG能在具有调色板和灰阶的图像上获得自身的优势。

四)PNG的缺点:

  1.PNG不支持动画应用效果。

  2. PNG对于照片的优化不好。

三.PNG的未来发展

一方面,我们都知道网络图像中(不包括swf)GIF除了制作静态图像以外还可以制作动态图像,这是目前位图里唯一能实现此功能的格式。而对于PNG,现在虽然还做不到这点,但目前已经有相关的开发针对这方面的功能,这就是新的标准——MNG(Multipleimage network graphics)多重影像网络图像格式。因而这是一个充满希望的发展方向。另一方面,我们又很沉重的看到,今天的网络图像都面临了目前已经形成工业标准,并具有初步开发和应用的SVG格式的挑战。相对于采用矢量格式和XML语言架构的未来网络图像标准格式—SVG而言,PNG受到自身的限制。

 

了解PNG格式

述文 2009-10-12 18:56:11 阅读17 评论0   字号: 订阅

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

PNG文件格式保留GIF文件格式的下列特性:

  1. 使用彩色查找表或者叫做调色板可支持256种颜色的彩色图像。
  2. 流式读/写性能(streamability):图像文件格式允许连续读出和写入图像数据,这个特性很适合于在通信过程中生成和显示图像。
  3. 逐次逼近显示(progressive display):这种特性可使在通信链路上传输图像文件的同时就在终端上显示图像,把整个轮廓显示出来之后逐步显示图像的细节,也就是先用低分辨率显示图像,然后逐步提高它的分辨率。
  4. 透明性(transparency):这个性能可使图像中某些部分不显示出来,用来创建一些有特色的图像。
  5. 辅助信息(ancillary information):这个特性可用来在图像文件中存储一些文本注释信息。
  6. 独立于计算机软硬件环境。
  7. 使用无损压缩。

 

PNG文件格式中要增加下列GIF文件格式所没有的特性:

  1. 每个像素为48位的真彩色图像。
  2. 每个像素为16位的灰度图像。
  3. 可为灰度图和真彩色图添加α通道。
  4. 添加图像的γ信息。
  5. 使用循环冗余码(cyclic redundancy code,CRC)检测损害的文件。
  6. 加快图像显示的逐次逼近显示方式。
  7. 标准的读/写工具包。
  8. 可在一个文件中存储多幅图像。

 

文件结构

 

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

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

(1) PNG文件署名域

8字节的PNG文件署名域用来识别该文件是不是PNG文件。该域的值是: 十进制数13780787113102610十六进制数89504e470d0a1a0a

 

(2) 数据块的结构

每个数据块都由表6-07所示的的4个域组成。

 

表6-07 PNG文件数据块的结构

 

名称

 

字节数

 

说明

Length(长度)4字节指定数据块中数据域的长度,其长度不超过

 

(231-1)字节

Chunk Type Code(数据块类型码)4字节数据块类型码由ASCII字母(A-Z和a-z)组成Chunk Data(数据块数据)可变长度存储按照Chunk Type Code指定的数据CRC(循环冗余检测)4字节存储用来检测是否有错误的循环冗余码

 

 

在表6-07中,CRC(cyclic redundancy check)域中的值是对Chunk Type Code域和Chunk Data域中的数据进行计算得到的。CRC具体算法定义在ISO 3309和ITU-T V.42中,其值按下面的CRC码生成多项式进行计算:

x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1

 

数据块结构

 

1. 关键数据块

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

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

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

 

表6-08 PNG文件头键数据块的结构

 

域的名称

 

字节数

 

说明

Width4 bytes图像宽度,以像素为单位Height4 bytes图像高度,以像素为单位Bit depth1 byte图像深度:

 

索引彩色图像:1,2,4或8

灰度图像:1,2,4,8或16

真彩色图像:8或16

ColorType1 byte颜色类型:

 

0:灰度图像, 1,2,4,8或16

2:真彩色图像,8或16

3:索引彩色图像,1,2,4或8

4:带α通道数据的灰度图像,8或16

6:带α通道数据的真彩色图像,8或16

Compression method1 byte压缩方法(LZ77派生算法)Filter method1 byte滤波器方法Interlace method1 byte隔行扫描方法:

 

0:非隔行扫描

1: Adam7(由Adam M. Costello开发的7

遍隔行扫描方法)

 

 

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

 

表6-09 调色板数据块结构

 

域的名称

 

字节数

 

说明

Red1 byte0 = 黑,255 = 红Green">

 

0 = 黑,255 = 绿

Blue1 byte0 = 黑,255 = 蓝

 

 

调色板实际是一个彩色索引查找表,它的表项数目可以是1~256中的一个数,每个表项有3字节,因此调色板数据块所包含的最大字节数为768。

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

(4) 图像结束数据IEND(image trailer chunk):它用来标记PNG文件或者数据流已经结束,并且必须要放在文件的尾部。

除了表示数据块开始的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)。

3. 数据块摘要

关键数据块、辅助数据块和专用公共数据块(special-purpose public chunks)综合在表6-10中。

 

表6-10 PNG文件格式中的数据块

 

数据块符号

 

数据块名称

 

多数据块

 

可选否

 

位置限制

IHDR文件头数据块

 

 

第一块cHRM基色和白色点数据块

 

 

在PLTE和IDAT之前gAMA图像γ数据块

 

 

在PLTE和IDAT之前sBIT样本有效位数据块

 

 

在PLTE和IDAT之前PLTE调色板数据块

 

 

在IDAT之前bKGD背景颜色数据块

 

 

在PLTE之后IDAT之前hIST图像直方图数据块

 

 

在PLTE之后IDAT之前tRNS图像透明数据块

 

 

在PLTE之后IDAT之前oFFs(专用公共数据块)

 

 

在IDAT之前pHYs物理像素尺寸数据块

 

 

在IDAT之前sCAL(专用公共数据块)

 

 

在IDAT之前IDAT图像数据块

 

 

与其他IDAT连续tIME图像最后修改时间数据块

 

 

无限制tEXt文本信息数据块

 

 

无限制zTXt压缩文本数据块

 

 

无限制fRAc(专用公共数据块)

 

 

无限制gIFg(专用公共数据块)

 

 

无限制gIFt(专用公共数据块)

 

 

无限制gIFx(专用公共数据块)

 

 

无限制IEND图像结束数据

 

 

最后一个数据块

 

 

tEXt和zTXt数据块中的标准关键字:

 

Title

 

图像名称或者标题

 

Author

 

图像作者名

 

Description

 

图像说明

 

Copyright

 

版权声明

 

CreationTime

 

原图创作时间

 

Software

 

创作图像使用的软件

 

Disclaimer

 

弃权

 

Warning

 

图像内容警告

 

Source

 

创作图像使用的设备

 

Comment

 

各种注释

 

     

 

     --------------------------------------------------------------

5.2.3  分析PNG图像文件结构(1)

-------------------------------------------------------------

结合上面对PNG文件的分析,下面分别对256色和16位色的PNG图像进行十六进制分析,通过分析PNG文件让读者更深入了解PNG文件格式。

如图5-15和图5-16所示,分别为256色PNG图像pic1.png和16位色PNG图像pic2.png。其中pic1.png图像的分辨率为200×150,文件大小为19 534 字节。pic2.png图像的分辨率为200×150,文件大小为104 744字节,带透明通道。

498)this.style.width=498;" border=0>图5-15  pic1.png图像498)this.style.width=498;" border=0> 图5-16  pic2.png图像现在来分析pic1.png的图像文件,在Winhex中打开pic1.png,如图5-17所示。
498)this.style.width=498;" border=0> (点击查看大图)图5-17  在Winhex中打开pic1.png文件首先分析PNG的文件标志。根据PNG文件的定义,从文件头开始前8字节数据是PNG文件的标志,如图5-18所示。
498)this.style.width=498;" border=0> (点击查看大图)图5-18  PNG文件的文件标志接下来应该就是PNG文件的数据块结构了,按照前面对PNG文件结构的分析,第一个数据块应该是文件头数据块(IHDR)数据块,文件头数据块(IHDR)定义了PNG文件的宽高、色深、压缩方法等参数,如图5-19所示。
498)this.style.width=498;" border=0> (点击查看大图)图5-19  文件头数据块(IHDR)结构

 

 

     --------------------------------------------------------------

5.2.3  分析PNG图像文件结构(2)

------------------------------------------------------------- 

 

表5-15归纳了pic1.png图像文件中文件头数据块(IHDR)中各字段的含义。由于PNG文件使用Big-Endian顺序存储数据,所以不需要反转字节数据理解。

表5-15 pic1.png图像文件中文件头数据块(IHDR)的各字段含义


十六进制值

描    述

00 00 00 0D

文件头的数据长度,00 00 00 0D =13

49 48 44 52

数据块类型标志,49 48 44 52的ASCII值等于IHDR

00 00 00 C8

图像的宽度,00 00 00 C8 = 200

%3
原创粉丝点击