一、什么是PNG格式?

PNG是便携式网络图形的英文缩写,是一种常用的图片格式,其特点是压缩比高、体积小,并且是无损压缩,支持透明效果,支持真彩和灰度级图像的Alpha通道透明度,最高支持24位真彩色图像以及8位灰度图像。除此之外,PNG支持文件的流式读/写。

二、PNG格式的文件结构

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

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

三、数据块(chunk)的结构

PNG的每一个数据块又可分为四个域,分别为长度、类型、数据域、循环冗余检测。

长度:显示数据字段的长度信息,为4字节无符号整数,故数据长度限制在(2^31-1)字节。

类型:为4字节数据块类型码,为了便于描述和检查PNG文件,类型代码仅限于大写和小写的ASCII字母。

数据域:存储按照数据块类型码指定的数据, 该字段可以是长度为零。

循环冗余检测:一个4字节的CRC(循环冗余校验)计算,在所述块的前面的字节,包括该块类型的代码和数据块的数据字段,但是不包括长度字段。 CRC始终存在,即使不包含数据块。

以一幅png图像为例,用二进制查看器打开,具体分析其数据块结构。


得到的二进制数据:

文件头数据块(IHDR)
png文件的前8个字节为固定的文件头信息,表明为png文件,其后便为IHDR。
IHDR的前1-4字节表示IHDR的长度(00 00 00 0D),可知长度为13。5-8字节(49 48 44 52)为数据块类型码,表明数据块为IHDR。9-16字节存储了图像的宽高信息(00 00 20 00 00 00 20 00),可知图片的宽高为512x512。其后的5个字节分别表示了图像的色深、颜色类型、滤波器方法、隔行扫描方法,最后四个字节为CRC循环冗余检测。

调色板数据块(PLTE)

调色板数据块的色彩存储格式为RGB(各1byte),是一个彩色索引查找表,每个表项为3字节。而图片的数据块里的像素直接存储调色板里的索引值,根据索引寻找对应的颜色及透明色。在IHDR中可得知图片为带α通道的真彩色图像,故没有调色板数据块。

图像数据块IDAT

在PLTE之后便为图像数据块,存储图像的具体数据。

图像结束数据IEND

固定12个字节放在数据流的末尾,标志着图像的结束。

四、其他辅助数据块

PNG文件规范制定了10个辅助数据块:

1、背景颜色数据块bKGD
2、基色和白色度数据块cHRM
3、图像γ数据块gAMA
4、图像直方图数据块hIST
5、物理像素尺寸数据块pHYs
6、样本有效位数据块sBIT
7、文本信息数据块tEXt
8、图像最后修改时间数据块tIME
9、图像透明数据块tRNS
10、压缩文本数据块zTXt

PNG格式的数据结构相关推荐

  1. 深度探索Win32可执行文件格式

    深度探索Win32可执行文件格式 摘要 对可执行文件的深入认识将带你深入到系统深处.如果你知道你的exe/dll里是些什么东东,你就是一个更有知识的程序员.作为系列文章的第一章,将关注这几年来PE格式 ...

  2. 共享可写节包含重定位_深度探索win32可执行文件格式

    深度探索win32可执行文件格式 Matt Pietrek 翻译:姜庆东 摘要:对可执行文件的深入认识将带你深入到系统深处.如果你知道你的exe/dll里是些什么东东,你就是一个更有知识的程序员.作为 ...

  3. form数据请求参数格式

    请求后台参数格式问题 当请求后台传递参数时,有多中类型,而每一种都需要前后台进行配合,而这有时候会很简单,有时候却十分困难,记录一下,以备后期深究 数据 后台需要的数据 form表单 嵌套数据,第二层 ...

  4. WAVEFORMATEX 格式说明

    WAVEFORMATEX The WAVEFORMATEX structure specifies the data format of a wave audio stream. WAVEFORMAT ...

  5. C语言数据结构,哪本书比较好用,配有完整代码

    前言 编程新手一般喜欢纠结一个词"最好",但学习编程语言最忌讳"贪". 新手习惯于找最好的编程语言,最好的入门书籍,代码最完善的入门资料,现在国内软件行业已经非 ...

  6. 关于WMV格式文件的解析

    wma文件结构示意图 格式的简单说明: 如图1,每一个WMA文件,它的头16个字节是固定的,为十六进制的"30 26 B2 75 8E 66 CF 11 A6 D9 00 AA 00 62 ...

  7. ArcGIS空间数据:矢量和栅格数据结构详解

    文章目录 矢量数据结构 矢量数据简介 Shapefile矢量格式 栅格数据结构 地理数据库中的栅格 栅格管理策略 栅格数据的地理属性 栅格的地理属性通常包括 地理数据集中的栅格块表 实体栅格表示 矢量 ...

  8. 数据结构java版txt,图解数据结构:使用Java

    图解数据结构:使用Java 下载 mobi epub pdf ☆☆☆☆☆ 胡昭民 著 下载链接在页面底部 发表于2021-03-10 图书介绍 出版社: 清华大学出版社 ISBN:9787302402 ...

  9. 深入剖析Win32可移植可执行文件格式

    深入剖析Win32可移植可执行文件格式 原文一:http://msdn.microsoft.com/zh-cn/magazine/bb985992(en-us).aspx 原文二http://msdn ...

最新文章

  1. LeetCode 221. Maximal Square----动态规划--谷歌面试算法题--Python解法
  2. CSS z-index 属性
  3. ObjectDataSource未能找到带参数的非泛型方法
  4. SpringBoot笔记整理(三)
  5. 里面怎么打中文字_“标题党”英语应该怎么翻译?不要翻译成“title party”!...
  6. Query Generation Module-NTU用多样性的query生成,涨点基于文本的实例分割(已开源)...
  7. html post 发送两次,jQuery Ajax发送两次第二次提交,发送三次三次
  8. 笨办法学 Python · 续 练习 19:改善性能
  9. oracle中decode的用法(例子)
  10. 《编写高质量代码:改善Java程序的151条建议》读书笔记
  11. 电力电子几款仿真软件的对比分析
  12. 延边大学计算机考研压分吗,这6所大学被严重低估,2020届高三考生注意收藏!适合“捡漏”...
  13. 计算机专业申请美本容易吗,美国纽约大学计算机科学专业申请难度大吗?看完录取要求就明白了...
  14. html高难度拼图,张馨月婚后生活太悠闲,宅家挑战高难度拼图
  15. vue在移动端实现禁用物理返回键
  16. 四足机器人步态规划(walk and trot)
  17. thinkpad e450c蓝牙重新安装后不能搜索到手机解决方案--适用大部分笔记本
  18. 证券、基金、期货从业资格证书哪个含金量更高?
  19. 【线上问题】线上故障分析-故障分级,原因,分类,混沌工程,排除方法
  20. ata职业技能评价证书考出来有啥用?

热门文章

  1. 2022金属非金属矿山安全检查(露天矿山)考试模拟100题及模拟考试
  2. 这年头,你真应该懂点法律常识
  3. java web租车系统_javaweb版本的答答租车系统 (源代码一)
  4. Cesium 模型透明化设置
  5. 仓库温度湿度控制措施_仓库温湿度控制管理规定
  6. 量化交易中如何判断趋势
  7. 转载:百为STM32开发板教程之十二——NAND FLASH
  8. 【ARMv8 编程】A64 数据处理指令——移动比较指令
  9. Bios 下的UCSI
  10. viewport 深入理解