PNG格式的数据结构
一、什么是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格式的数据结构相关推荐
- 深度探索Win32可执行文件格式
深度探索Win32可执行文件格式 摘要 对可执行文件的深入认识将带你深入到系统深处.如果你知道你的exe/dll里是些什么东东,你就是一个更有知识的程序员.作为系列文章的第一章,将关注这几年来PE格式 ...
- 共享可写节包含重定位_深度探索win32可执行文件格式
深度探索win32可执行文件格式 Matt Pietrek 翻译:姜庆东 摘要:对可执行文件的深入认识将带你深入到系统深处.如果你知道你的exe/dll里是些什么东东,你就是一个更有知识的程序员.作为 ...
- form数据请求参数格式
请求后台参数格式问题 当请求后台传递参数时,有多中类型,而每一种都需要前后台进行配合,而这有时候会很简单,有时候却十分困难,记录一下,以备后期深究 数据 后台需要的数据 form表单 嵌套数据,第二层 ...
- WAVEFORMATEX 格式说明
WAVEFORMATEX The WAVEFORMATEX structure specifies the data format of a wave audio stream. WAVEFORMAT ...
- C语言数据结构,哪本书比较好用,配有完整代码
前言 编程新手一般喜欢纠结一个词"最好",但学习编程语言最忌讳"贪". 新手习惯于找最好的编程语言,最好的入门书籍,代码最完善的入门资料,现在国内软件行业已经非 ...
- 关于WMV格式文件的解析
wma文件结构示意图 格式的简单说明: 如图1,每一个WMA文件,它的头16个字节是固定的,为十六进制的"30 26 B2 75 8E 66 CF 11 A6 D9 00 AA 00 62 ...
- ArcGIS空间数据:矢量和栅格数据结构详解
文章目录 矢量数据结构 矢量数据简介 Shapefile矢量格式 栅格数据结构 地理数据库中的栅格 栅格管理策略 栅格数据的地理属性 栅格的地理属性通常包括 地理数据集中的栅格块表 实体栅格表示 矢量 ...
- 数据结构java版txt,图解数据结构:使用Java
图解数据结构:使用Java 下载 mobi epub pdf ☆☆☆☆☆ 胡昭民 著 下载链接在页面底部 发表于2021-03-10 图书介绍 出版社: 清华大学出版社 ISBN:9787302402 ...
- 深入剖析Win32可移植可执行文件格式
深入剖析Win32可移植可执行文件格式 原文一:http://msdn.microsoft.com/zh-cn/magazine/bb985992(en-us).aspx 原文二http://msdn ...
最新文章
- LeetCode 221. Maximal Square----动态规划--谷歌面试算法题--Python解法
- CSS z-index 属性
- ObjectDataSource未能找到带参数的非泛型方法
- SpringBoot笔记整理(三)
- 里面怎么打中文字_“标题党”英语应该怎么翻译?不要翻译成“title party”!...
- Query Generation Module-NTU用多样性的query生成,涨点基于文本的实例分割(已开源)...
- html post 发送两次,jQuery Ajax发送两次第二次提交,发送三次三次
- 笨办法学 Python · 续 练习 19:改善性能
- oracle中decode的用法(例子)
- 《编写高质量代码:改善Java程序的151条建议》读书笔记
- 电力电子几款仿真软件的对比分析
- 延边大学计算机考研压分吗,这6所大学被严重低估,2020届高三考生注意收藏!适合“捡漏”...
- 计算机专业申请美本容易吗,美国纽约大学计算机科学专业申请难度大吗?看完录取要求就明白了...
- html高难度拼图,张馨月婚后生活太悠闲,宅家挑战高难度拼图
- vue在移动端实现禁用物理返回键
- 四足机器人步态规划(walk and trot)
- thinkpad e450c蓝牙重新安装后不能搜索到手机解决方案--适用大部分笔记本
- 证券、基金、期货从业资格证书哪个含金量更高?
- 【线上问题】线上故障分析-故障分级,原因,分类,混沌工程,排除方法
- ata职业技能评价证书考出来有啥用?