PNG文件格式具体解释
PNG文件结构分析(上:了解PNG文件存储格式)
前言
我们都知道,在进行J2ME的手机应用程序开发的时候,在图片的使用上,我们能够使用PNG格式的图片(甚至于在有的手机上,我们仅仅能够使用PNG格式的图片),虽然使用图片能够为我们的应用程序添加不少亮点,然而,仅仅支持PNG格式的图片却又限制了我们进一步发挥的可能性(事实上,应该说是因为手机平台上的处理能力有限)。 在MIDP2中,或者某些厂商(如NOKIA)提供的API中,提供了drawPixels/getPixels的方法,这些方法进一步提高了开发人员处理图片的灵活性,然而,在MIDP2还未全然普及的今天,我们须要在MIDP1 .0中实现这类方法还属于异想天开,因此,为了实现更高级的应用,我们必须充分挖掘PNG的潜力。
PNG的文件结构
对于一个PNG文件来说,其文件头总是由位固定的字节来描写叙述的:
十进制数 | 137 80 78 71 13 10 26 10 |
十六进制数 | 89 50 4E 47 0D 0A 1A 0A |
当中第一个字节0x89超出了ASCII字符的范围,这是为了避免某些软件将PNG文件当做文本文件来处理。文件里剩余的部分由3个以上的PNG的数据块(Chunk)依照特定的顺序组成,因此,一个标准的PNG文件结构应该例如以下:
PNG文件标志 | PNG数据块 | …… | PNG数据块 |
PNG数据块(Chunk)
PNG定义了两种类型的数据块,一种是称为重要数据块(critical chunk),这是标准的数据块,还有一种叫做辅助数据块(ancillary chunks),这是可选的数据块。重要数据块定义了4个标准数据块,每一个PNG文件都必须包括它们,PNG读写软件也都必需要支持这些数据块。尽管PNG文件规范没有要求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个数据块按以上先后顺序进行存储,而且都仅仅出现一次。
数据块结构
PNG文件里,每一个数据块由4个部分组成,例如以下:
名称 | 字节数 | 说明 |
Length (长度) | 4字节 | 指定数据块中数据域的长度,其长度不超过(231-1)字节 |
Chunk Type Code (数据块类型码) | 4字节 | 数据块类型码由ASCII字母(A-Z和a-z)组成 |
Chunk Data (数据块数据) |
PNG文件格式具体解释相关推荐
- c语言头文件格式图片_请高手赐教C语言图片文件头文件格式的解释,该怎么处理...
当前位置:我的异常网» C语言 » 请高手赐教C语言图片文件头文件格式的解释,该怎么 请高手赐教C语言图片文件头文件格式的解释,该怎么处理 www.myexceptions.net 网友分享于:20 ...
- 查看fna文件Linux,NCBI上基因组文件格式及解释
最近在对于一些关于基因组的数据进行处理,发现如果在NCBI上下载一个物种例如E. coil的基因组序列之后,有很多并不常见的文件类型,例如.asn.faa.ffn.fna *.val 等等,处于好奇, ...
- PE文件数字签名信息读取存储及格式具体解释图之上(历史代码,贴出学习)
// 注意下图PE文件格式具体解释图中的 // IMAGE_NT_HEADERS------->OptionalHeader------>DataDirectory[IMAGE_DIREC ...
- amr文件格式分析【转http://blog.csdn.net/dinggo/article/details/1966444】
目录 1. 概述 2. AMR编码方式 3. AMR文件结构示范图 4. AMR帧头格式分析 5. 异常帧分析 6. AMR帧读取算法 7. 参考资料 1. ...
- pem、 .p12、.cer、pkcs 等文件格式的区别
本文对CSR .pem.crt.cer等文件格式进行解释. .csr .csr 是证书请求文件,是由 RFC 2986定义的PKCS10格式,包含部分/全部的请求证书的信息,比如,主题, 机构,国家 ...
- [译]深入理解JVM
深入理解JVM 原文链接:http://www.cubrid.org/blog/dev-platform/understanding-jvm-internals 每个使用Java的开发者都知道Java ...
- NCBI 下载fna文件 human viral bacteria
基于manifest 手动批量下载 #!/usr/bin/bash cat manifest.txt | while read row do path=`dirname $row` # para -d ...
- c语言怎么判断文件类型,判断你的文件是否为合法的PE文件和应用类型
作者:赖锋 源代码下载 可能很多的人都没有注意到一些事情,就是你的程序是不是合法的可运行的应用程序,例如一个文件只是把后缀改成 .exe 的形式就显示为应用程序的图标了! 你不想写一个根据后缀名就确定 ...
- VMware虚拟机的安装以及基一些础命令
文章目录 虚拟机环境配置 1安装虚拟机 2 网络环境调试 2.1配置网卡 2.2查看你的NAT 网段 2.3查看你的nat网关 2.4 配置你的虚拟机网卡 2.5 连接xshell 2.5.1新建连接 ...
最新文章
- 人工智能项目:需要注意的七件事
- 【沟通的艺术】你能勾住你的听众么?
- python打出由边框包围的_python – 提取边框并将其保存为图像
- 目录服务用户OSX: ARD的基于目录服务用户权限
- Android中文API(99)—— RelativeLayout
- spring3.0 aop 获取 ibatis 执行的语句_Mybatis 源码分析:执行器
- swig c java gemt,SWIG C函数指针和JAVA
- mysql5.6.27安装_mysql-5.6.27源码安装及错误解决办法
- php做页面编辑器,最牛在线编辑器ueditor在thinkphp框架中的使用方法
- RNA 22. SCI 文章中基于表达估计恶性肿瘤组织的基质细胞和免疫细胞(ESTIMATE)
- 读《别闹了,费曼先生》 时的几点想法
- asio ssl 笔记
- (转载)反垃圾邮件技术解析
- 【美国大学生数学建模比赛】2020C题(总结和原创参赛论文)百度云请自取
- PS制作一个百度的小熊掌LOGO
- excel一个表格分成多个怎么做?
- Kurento 第一坑
- Parsec [error-800] Internet无法访问的解决方案
- 东方已渐白。一枕清欢更待何人说
- 苏州市RFID客运车辆资产管理系统:RFID防盗资产管理-新导智能
热门文章
- Elasticsearch结构化搜索_filter执行原理深度剖析(bitset机制与caching机制)
- python的一些函数
- [Usaco2007 Demo]City skyline
- Eclipse 编译项目
- linux下配置防火墙
- 绿色网格称其IT环境评估工具取得成功
- LNK2026	module unsafe for SAFESEH image
- 问题八:C++中this是干嘛用的
- Linux fread函数例程,21.2.9 文件读写实例--实现cp命令
- 数据治理管理平台功能模块与特性