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文件格式具体解释相关推荐

  1. c语言头文件格式图片_请高手赐教C语言图片文件头文件格式的解释,该怎么处理...

    当前位置:我的异常网» C语言 » 请高手赐教C语言图片文件头文件格式的解释,该怎么 请高手赐教C语言图片文件头文件格式的解释,该怎么处理 www.myexceptions.net  网友分享于:20 ...

  2. 查看fna文件Linux,NCBI上基因组文件格式及解释

    最近在对于一些关于基因组的数据进行处理,发现如果在NCBI上下载一个物种例如E. coil的基因组序列之后,有很多并不常见的文件类型,例如.asn.faa.ffn.fna *.val 等等,处于好奇, ...

  3. PE文件数字签名信息读取存储及格式具体解释图之上(历史代码,贴出学习)

    // 注意下图PE文件格式具体解释图中的 // IMAGE_NT_HEADERS------->OptionalHeader------>DataDirectory[IMAGE_DIREC ...

  4. amr文件格式分析【转http://blog.csdn.net/dinggo/article/details/1966444】

    目录 1.    概述 2.    AMR编码方式 3.    AMR文件结构示范图 4.    AMR帧头格式分析 5.    异常帧分析 6.    AMR帧读取算法 7.    参考资料 1.  ...

  5. pem、 .p12、.cer、pkcs 等文件格式的区别

    本文对CSR .pem.crt.cer等文件格式进行解释.  .csr .csr 是证书请求文件,是由 RFC 2986定义的PKCS10格式,包含部分/全部的请求证书的信息,比如,主题, 机构,国家 ...

  6. [译]深入理解JVM

    深入理解JVM 原文链接:http://www.cubrid.org/blog/dev-platform/understanding-jvm-internals 每个使用Java的开发者都知道Java ...

  7. NCBI 下载fna文件 human viral bacteria

    基于manifest 手动批量下载 #!/usr/bin/bash cat manifest.txt | while read row do path=`dirname $row` # para -d ...

  8. c语言怎么判断文件类型,判断你的文件是否为合法的PE文件和应用类型

    作者:赖锋 源代码下载 可能很多的人都没有注意到一些事情,就是你的程序是不是合法的可运行的应用程序,例如一个文件只是把后缀改成 .exe 的形式就显示为应用程序的图标了! 你不想写一个根据后缀名就确定 ...

  9. VMware虚拟机的安装以及基一些础命令

    文章目录 虚拟机环境配置 1安装虚拟机 2 网络环境调试 2.1配置网卡 2.2查看你的NAT 网段 2.3查看你的nat网关 2.4 配置你的虚拟机网卡 2.5 连接xshell 2.5.1新建连接 ...

最新文章

  1. 人工智能项目:需要注意的七件事
  2. 【沟通的艺术】你能勾住你的听众么?
  3. python打出由边框包围的_python – 提取边框并将其保存为图像
  4. 目录服务用户OSX: ARD的基于目录服务用户权限
  5. Android中文API(99)—— RelativeLayout
  6. spring3.0 aop 获取 ibatis 执行的语句_Mybatis 源码分析:执行器
  7. swig c java gemt,SWIG C函数指针和JAVA
  8. mysql5.6.27安装_mysql-5.6.27源码安装及错误解决办法
  9. php做页面编辑器,最牛在线编辑器ueditor在thinkphp框架中的使用方法
  10. RNA 22. SCI 文章中基于表达估计恶性肿瘤组织的基质细胞和免疫细胞(ESTIMATE)
  11. 读《别闹了,费曼先生》 时的几点想法
  12. asio ssl 笔记
  13. (转载)反垃圾邮件技术解析
  14. 【美国大学生数学建模比赛】2020C题(总结和原创参赛论文)百度云请自取
  15. PS制作一个百度的小熊掌LOGO
  16. excel一个表格分成多个怎么做?
  17. Kurento 第一坑
  18. Parsec [error-800] Internet无法访问的解决方案
  19. 东方已渐白。一枕清欢更待何人说
  20. 苏州市RFID客运车辆资产管理系统:RFID防盗资产管理-新导智能

热门文章

  1. Elasticsearch结构化搜索_filter执行原理深度剖析(bitset机制与caching机制)
  2. python的一些函数
  3. [Usaco2007 Demo]City skyline
  4. Eclipse 编译项目
  5. linux下配置防火墙
  6. 绿色网格称其IT环境评估工具取得成功
  7. LNK2026 module unsafe for SAFESEH image
  8. 问题八:C++中this是干嘛用的
  9. Linux fread函数例程,21.2.9 文件读写实例--实现cp命令
  10. 数据治理管理平台功能模块与特性