好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

解析png图像文件.doc

32页
  • 卖家[上传人]:mg****85
  • 文档编号:33751032
  • 上传时间:2018-02-17
  • 文档格式:DOC
  • 文档大小:2.91MB
  • / 32 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • PNG 图像文件介绍PNG 图像文件格式PNG 是可携式网络图像(portable network graphics)的英文缩写 PNG 是从网络上开始发展的,目的是替代 GIF 和 JPG 格式,PNG 图像文件格式也是当今游戏中常用的图像资源文件格式 了PNG 图像文件支持的图像颜色非常丰富,存储灰度图时可使用16位色深表示,存储真彩色图像时色深更可达到48位之多PNG 图像文件介绍与 BMP 格式相比,PNG 格式稍微复杂些 PNG 图像支持从0~255级次的多层透明色,使用无损压缩的 zlib 压缩算法压缩图像数据通常使用 zlib 压缩过的图像文件大小比 BMP使用的 RLE 压缩的效果好,BMP 的 RLE 压缩算法只支持压缩8位以下的图像,对于16位以上的真彩色图像不支持图 像压缩,PNG 使用的 zlib 压缩算法支持任何色深的图像数据压缩,压缩后的图像数据可以完整还原,相比之下 JPG 需要牺牲图像质量使用有损压缩来获得大 的压缩率最后有一点需要注意,PNG 图像格式使用 Big-Endian 顺序存储数据PNG 图像文件存储结构(1)PNG 文件存储结构的格式可以在 http://www.w3.org/TR/REC-png.htm 上找到定义。

      BMP 文件总体上由两部分组成,分别是 PNG 文件标志和数据块( chunks) ,如表5-8所示其中数据块分为两类:关键数据块(critical chunk)和辅助数据块(ancillary chunks ) 表5-8 PNG 文件的组成结构PNG 文件标志数据块(chunks)1.PNG 文件标志PNG 文件标志由8字节数据组成:89 50 4E 47 0D 0A 1A 0Ah,其中50 4E 47对应的 ASCII值是"PNG"2.数据块(chunks )紧跟在 PNG 文件标志后面的数据是数据块(chunks) ,数据块(chunks )分为两类:关键数据块(critical chunks )和辅助数据块(ancillary chunks) 关键数据块(critical chunk)在 PNG 文件中是必须有的,而辅助数据块(ancillary chunks)是可选的关键数据块(critical chunks)由4部分组成:文件头数据块(IHDR) 、调色板数据块(PLTE) 、图像数据块(IDAT)和图像结束数据(IEND) ,其中调色板数据块(PLTE)根据图像的色深可选。

      辅助数据块(ancillary chunks)一共有14个,这些辅助数据块包含了很多信息,辅助数据块不是必须包含的PNG 文件的关键数据块和辅助数据块的组织顺序如表5-9和表5-10 所示表5-9 PNG 文件的关键数据块(critical chunks)组织顺序数据块名称 允许多个数据块 位 置文件头数据块(IHDR) 不允许 第一个数据块调色板数据块(PLTE) 不允许 第二个数据块,可选图像数据块(IDAT ) 允许如果有调色板数据块(PLTE) ,则是第三个数据块,如果没有调色板数据块(PLTE) ,则时第二个数据块如果有多个图像数据块,则必须按图像数据连续存储图像结束数据(IEND ) 不允许 最后一个数据块表5-10 PNG 文件的辅助数据块(ancillary chunks)组织顺序数据块名称 允许多个数据块 位 置基色和白色点数据块(cHRM) 不允许 在 PLTE 和 IDAT 之前图像 γ 数据块(gAMA) 不允许 在 PLTE 和 IDAT 之前ICCP(iCCP) 允许 在 PLTE 之后 IDAT 之前如果有 iCCP,则无 sRGB续表数据块名称允许多个数据块位 置样本有效位数据块(sBIT) 不允许在 PLTE 和 IDAT 之前标准 RPG 颜色( sRGB) 不允许在 PLTE 之后 IDAT之前如果有 sRGB,则无iCCP背景颜色数据块(bKGD) 不允许在 PLTE 之后 IDAT之前图像直方图数据块(hIST ) 不允许在 PLTE 之后 IDAT之前图像透明数据块(tRNS) 不允许 在 PLTE 之后 IDAT之前物理像素尺寸数据块(pHYs ) 不允许 在 IDAT 之前建议调色板(sPLT) 允许 在 IDAT 之前图像最后修改时间数据块(tIME) 不允许 无限制国际文本数据(iTXt) 允许 无限制文本信息数据块(tEXt) 允许 无限制压缩文本数据块(zTXt) 允许 无限制PNG 图像文件存储结构(2)用图像可以清晰显示表5-9和表 5-10之间的关系,如图5-13和图5-14所示。

      (点击查看大图)图5-13 包含调色板数据块(PLTE)的 PNG 图像文件格式(点击查看大图)图5-14 不包含调色板数据块(PLTE)的 PNG 图像文件格式图中上标的含义如表5-11所示表5-11 上标的含义符 号 含 义1 只有1个+ 1个或多个? 0个或1个* 0个或多个| 2选1PNG 图像文件中每一块数据块的格式都是相同的,分别由4个部分组成,格式如表5-12所示表5-12 PNG 文件的数据块格式字 段 名 大小(单位:字节) 描 述Length(长度) 4 指定数据块中的数据长度 Chunk Type Code(数据块类 4 数据块类型,例如型码) IHDR、PLTE、IDAT 等Chunk Data(数据块数据) Length 存储数据CRC(循环冗余检测) 4 循环冗余码CRC 循环冗余码生成的计算方式是通过对 Chunk Type Code 和 Chunk Data 中的数据进行计算得到的,计算方式如下:x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1PNG 图像文件存储结构(3)下面将讲解在 PNG 文件中的4个关键数据块(critical chunk)的含义。

      ① 文件头数据块(IHDR)文件头数据块(IHDR)它包含有 PNG 文件中存储的图像数据的基本信息,如图像的宽高、色深、颜色类型、压缩方式等一个 PNG 文件只能有一个文件头数据块,表5-13列出了文件头数据块(IHDR)中各字段的含义表5-13 文件头数据块(IHDR) 中各字段的含义字段名大小(单位:字节)描 述Width 4 图像宽度,以像素为单位Height 4 图像高度,以像素为单位Bit depth 1图像深度: 索引彩色图像:1,2,4或8灰度图像:1,2,4,8或16真彩色图像:8或16ColorType 1颜色类型:0:灰度图像,1,2,4,8或162:真彩色图像,8或163:索引彩色图像,1,2,4或84:带 α 通道数据的灰度图像,8或166:带 α 通道数据的真彩色图像,8或16Compressionmethod 1 压缩方法(LZ77变种算法)Filter method 1 滤波器方法Interlacemethod 1隔行扫描方法:0:非隔行扫描 1: Adam7(由 Adam M.Costello 开发的7遍隔行扫描方法)文件头数据块(IHDR)结构可以使用如下代码定义:typedef struct {DWORD btChunkLen;CHAR btChunkType[4];} PNG_CHUNK_HEADER;typedef enum pngColorSpaceType {GrayScale = 0,TrueColor = 2,Indexed = 3,AlphaGrayScale = 4,AlphaTrueColor = 6} PNG_COLOR_SPACE_TYPE;// Compression Methodstypedef enum pngCompressionMethod {Deflate = 0} PNG_COMPR_METHOD;// Filter Methodstypedef enum pngFilterMethod {AdaptiveFiltering = 0} PNG_FILTER_METHOD;// Interlace Methodstypedef enum pngInterlaceMethod {NoInterlace = 0,Adam7Interlace = 1} PNG_INTERLACE_METHOD;// IHDR datatypedef struct {UINT width;UINT height;BYTE bit_depth;PNG_COLOR_SPACE_TYPE color_type;PNG_COMPR_METHOD compr_method;PNG_FILTER_METHOD filter_method;PNG_INTERLACE_METHOD interlace_method;} IHDR_CHUNK_DATA;② 调色板数据块(PLTE )PNG 的调色板数据块(PLTE)和之前介绍 BMP 图像格式中的调色板类似,都是提供给8位色深以下的图像使用。

      PNG 的调色板由3个字节组成,每个字节分别表示红、绿、蓝三色的颜色值对于 PNG 图像文件来说,大于8位色深的图像,如真彩色图像也可以使用调色板,目的是便于非真彩色显示程序用它来量化图像数据,从而显示该图像一个 PNG 文件只能有一个调色板数据块,调色板数据块从下标0开始,表5-14列出了调色板数据块(PLTE)中各字段的含义表5-14 调色板数据块(PLTE) 中各字段的含义字段名 大小(单位:字节) 描 述btRed 1 红色颜色值btGreen 1 绿色颜色值btBlue 1 蓝色颜色值调色板数据块(PLTE)结构可以使用如下代码定义:typedef struct {BYTE btRed ;BYTE btGreen;BYTE btBlue;} PNG_PALETTE_PIXEL;PNG 图像文件存储结构(4)③ 图像数据块(IDAT)PNG 的图像数据块(IDAT )存储图像的实际数据,相当于 BMP 图像的图像数据,由于PNG 可包含多幅图像,所以 PNG 的图像数据块可能是由一幅图像的数据组成,也可能是由多幅图像的数据组成图像数据块中的图像数据可能是经过变种的 LZ77压缩编码 DEFLATE 压缩的,关于DEFLATE 详细介绍可以参考《DEFLATE Compressed Data Format Specification version 1.3》 ,网址: http://www.ietf.org/rfc/rfc1951.txt 。

      图像数据块(IDAT )结构可以使用如下代码定义:PNG_CHUNK_HEADER chunkHdr;BYTE idatChunkData[chunkHdr.btChunkLen];DWORD idatCrc ;④ 图像结束数据(IEND)PNG 的图像结束数据(IEND)用来标记 PNG 文件结束,并且必须要放在文件的尾部一般情况下,所有 PNG 图像结束数据(IEND )的十六进制数值都是一样的,具体的数值如下:00 00 00 00 49 45 4E 44 AE 42 60 82PNG 的辅助数据块(ancillary chunks)一共有14个,可以分为 5类,如表5-10 所示,由于篇幅关系不能将全部辅助数据块(ancillary chunks)的详细结构进行说明,如果读者有兴趣请参考 http://www.w3.org/TR/REC-png.html分析 PNG 图像文件结构(1)结合上面对 PNG 文件的分析,下面分别对256色和16位色的 PNG 图像进行十六进制分析,通过分析 PN。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.