您的位置:首页 > 其它

PNG图像文件结构解析

2013-03-06 17:48 344 查看
    1)PNG文件的组成

         PNG图像文件基本结构为: PNG文件头:PNG数据块1:PNG数据块2:.....PNG数据块N。

                 即整个PNG文件由一个PNG文件头和多个PNG数据块组成。

    2)PNG文件头

                 PNG文件头由8个字节组成,而且是固定的。值:89 50 4E 47 0D 0A 1A 0A

    3)PNG数据块

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

         下标给出PNG中数据块的类别,其中,关键数据块部分使用深色背景加以区分:

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图像结束数据最后一个数据块
                 为了简单起见,我们假设在我们使用的PNG文件中,只有关键数据块,并都只出现一次。

     4)文件头数据块IHDR

                结构: 

     ?                          4bytes          IHDR头长度(13)

                              ?                           4bytes         IHDR标志(49 48 44 52)

                            Width                     4bytes          图像宽度(pixel)

                            Height                    4bytes          图像高度(pixel)

                            Bit depth                1byte            图像深度(索引图像:1,2,4,或8;灰度图像:1,2,4,8或16;真彩:8或16)

                            ColorType              1byte            颜色类型(0:灰度图像;2:真彩图像;3索引彩色)

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

                            Filter method         1byte            滤波器方法

                            Interlacemethod     1byte           隔行扫描方法

                            CRC                        4bytes         校验码

    5)调色板数据块PLTE

                  调色板数据块包含有与索引彩色图像相关的彩色变换数据,它仅与彩色图像有关。

                  PLTE可以包含1~256个调色板信息,每一个调色板信息由3个字节组成(RGB)。

                            ?                    4byte     说明调色板数据长度

                            ?                      4byte     PLTE标识(50 4C 54 45)

                            ?                      3byte      颜色(多个)

                            CRC                4byte       

    6)图像数据块IDAT

                  图像数据块存放着真正的数据信息,可以包含多个连续顺序的图像数据块。

                             ?                      4byte          数据长度

                             ?                      4byte           IDAT标识(49 44 41 54)

                             ?                     .....                 压缩的数据

                            CRC                4byte

    7)图像结束数据块

                  图像结束数据块标记PNG文件已经结束,12个固定字节(00 00 00 00 49 45 4E 44 AE 42 60 82)。

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

实例研究PNG

以下是由Fireworks生成的一幅图像,图像大小为8*8,

为了方便大家观看,我们将图像放大:



使用UltraEdit32打开该文件,如下:

00000000~00000007:



可以看到,选中的头8个字节即为PNG文件的标识。

接下来的地方就是IHDR数据块了:

00000008~00000020:



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

49 48 44 52 IHDR标识 

00 00 00 08 图像的宽,8像素 

00 00 00 08 图像的高,8像素 

04 色深,2^4=16,即这是一个16色的图像(也有可能颜色数不超过16,当然,如果颜色数不超过8,用03表示更合适) 

03 颜色类型,索引图像 

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

00 同上 

00 非隔行扫描 

36 21 A3 B8 CRC校验

00000021~0000002F:



可选数据块sBIT,颜色采样率,RGB都是256(2^8=256)

00000030~00000062:



这里是调色板信息

00 00 00 27 说明调色板数据长为39字节,既13个颜色数 

50 4C 54 45 PLTE标识 

FF FF 00 颜色0 

FF ED 00 颜色1 

…… …… 

09 00 B2 最后一个颜色,12 

5F F5 BB DD CRC校验

00000063~000000C5:



这部分包含了pHYs、tExt两种类型的数据块共3块,由于并不太重要,因此也不再详细描述了。

000000C0~000000F8:



以上选中部分是IDAT数据块

00 00 00 27 数据长为39字节 

49 44 41 54 IDAT标识 

78 9C…… 压缩的数据,LZ77派生压缩方法 

DA 12 06 A5 CRC校验

IDAT中压缩数据部分在后面会有详细的介绍。

000000F9~00000104:



IEND数据块,这部分正如上所说,通常都应该是

00 00 00 00 49 45 4E 44 AE 42 60 82

至此,我们已经能够从一个PNG文件中识别出各个数据块了。由于PNG中规定除关键数据块外,其它的辅助数据块都为可选部分,因此,有了这个标准 后,我们可以通过删除所有的辅助数据块来减少PNG文件的大小。(当然,需要注意的是,PNG格式可以保存图像中的层、文字等信息,一旦删除了这些辅助数 据块后,图像将失去原来的可编辑性。)



删除了辅助数据块后的PNG文件,现在文件大小为147字节,原文件大小为261字节,文件大小减少后,并不影响图像的内容。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  im