文章目录

  • png文件格式概述
  • (1)格式特性
    • 流式读/写性能
    • 图像说明部分
  • (2)文件结构
    • PNG文件署名域
    • 数据块的结构
  • (3)文件格式
  • (4)4个标准数据块
    • 文件头数据块IHDR(header chunk)
    • 调色板数据块PLTE(palette chunk)
    • 图像数据块IDAT(image data chunk)
    • 图像结束数据IEND(image trailer chunk)

png文件格式概述

png是一种无损压缩的位图片形格式。其设计目的是为了替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性。

png格式是非失真性压缩的,允许使用类似于GIF格式的调色板技术,支持真彩色图像,并具备阿尔法通道(半透明)等特性。png使用从LZ77派生的无损数据压缩算法,由于它压缩比高,生成文件体积小,一般被应用于JAVA程序、网页或S60程序中。

(1)格式特性

使用彩色查找表或者叫做调色板可支持256种颜色的彩色图像

流式读/写性能

图像文件格式允许连续读出和写入图像数据,这个特性很适合于在通信过程中生成和显示图像。

图像说明部分

每个像素为48位的真彩色图像

每个像素为16位的灰度图像

可为灰度图和真彩色图添加α通道

添加图像的γ信息

使用循环冗余码(cyclic redundancy code,CRC)检测损坏的文件。

(2)文件结构

PNG图像格式文件由一个8字节的PNG文件署名域和按照特定结构组织的3个以上的数据块组成。PNG定义了两种类型的数据块,一种是称为关键数据块(critical chunk),这是标准的数据块,另一种叫做辅助数据块(ancillary chunks),这是可选的数据块。关键数据块定义了4个标准数据块,每个PNG文件都必须包含它们,PNG读写软件也都必须要支持这些数据块。

PNG文件署名域

8字节的PNG文件署名域用来识别该文件是不是PNG文件。该域的值是:

十进制数137 80 78 71 1310 26 10

十六进制数 89 50 4e 47 0d 0a 1a 0a

数据块的结构

Length(长度): 4字节 指定数据块中数据域的长度,其长度不超过(231-1)字节

Chunk Type Code(数据块类型码): 4字节 数据块类型码由ASCII字母(A-Z和a-z)组成

Chunk Data(数据块数据) :可变长度 存储按照Chunk Type Code指定的数据

CRC(循环冗余检测) :4字节 存储用来检测是否有错误的循环冗余码

框选的第一部分表示数据块数据长度(即第3部分),为13字节
框选的第二部分数据块类型码
框选的第三部分是数据块部分
框选的第四部分和第五部分是CRC校验码:它的值是对Chunk Type Code域和Chunk Data域中的数据进行计算得到的。CRC具体算法定义在ISO 3309和ITU-T V.42中,其值按下面的CRC码生成多项式进行计算:x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1

(3)文件格式

PNG格式有8位、24位、32位三种形式,其中8位PNG支持两种不同的透明形式(索引透明和alpha透明),24位PNG不支持透明,32位PNG在24位基础上增加了8位透明通道,因此可展现256级透明程度。

(4)4个标准数据块

文件头数据块IHDR(header chunk)

它包含有PNG文件中存储的图像数据的基本信息,并要作为第一个数据块出现在PNG数据流中,而且一个PNG数据流中只能有一个文件头数据块。


该图像宽度为1893,高度为415,图像深度为8,颜色类型为真彩色图像,压缩方法为0,滤波器方法为0,非隔行扫描。

调色板数据块PLTE(palette chunk)

它包含有与索引彩色图像((indexed-color image))相关的彩色变换数据,它仅与索引彩色图像有关,而且要放在图像数据块(image data chunk)之前。真彩色的PNG数据流也可以有调色板数据块,目的是便于非真彩色显示程序用它来量化图像数据,从而显示该图像。

调色板实际是一个彩色索引查找表,它的表项数目可以是1~256中的一个数,每个表项有3字节,因此调色板数据块所包含的最大字节数为768。

图像数据块IDAT(image data chunk)

它存储实际的数据,在数据流中可包含多个连续顺序的图像数据块。

图像结束数据IEND(image trailer chunk)

它用来标记PNG文件或者数据流已经结束,并且必须要放在文件的尾部。

从上图可以看出,IEND 数据块的长度总是0 (00 00 00 00,除非人为加入信息),数据标识总是IEND (49 45 4E 44),因此,CRC码也总是AE 42 60 82。

除了表示数据块开始的IHDR必须放在最前面, 表示PNG文件结束的IEND数据块放在最后面之外,其他数据块的存放顺序没有限制。

作业3.1png图像格式文件解析相关推荐

  1. 数据压缩作业二——分析tga文件

    数据压缩作业二--分析tga文件 文章目录 数据压缩作业二--分析tga文件 一.TGA格式文件概述 二.使用二进制编辑软件分析tga文件 1.TGA文件头(TGA FILE HEADER) 2. 图 ...

  2. PDF 与 PS页面描述语言与PDF文件解析(转)

    PDF 与 PS页面描述语言与PDF文件解析(转) 页面描述语言 页面描述语言(Page Description Language,简称PDL)是一种面向输出效应的语言,用于描述打印或照排的版面,这种 ...

  3. Json文件解析(下

    Json文件解析(下) 代码地址:https://github.com/nlohmann/json 从STL容器转换 任何序列容器(std::array,std::vector,std::deque, ...

  4. Json文件解析(上)

    Json文件解析(上) 代码地址:https://github.com/nlohmann/json 自述文件 alt=GitHub赞助商 data-canonical-src="https: ...

  5. OpenCV读写视频文件解析(二)

    OpenCV读写视频文件解析(二) VideoCapture::set 设置视频捕获中的属性. C++: bool VideoCapture::set(int propId, double value ...

  6. OpenCV读写视频文件解析

    OpenCV读写视频文件解析 一.视频读写类 视频处理的是运动图像,而不是静止图像.视频资源可以是一个专用摄像机.网络摄像头.视频文件或图像文件序列. 在OpenCV 中,VideoCapture 类 ...

  7. cocosstudio csd文件解析为.lua

    在学习python过程中,有幸能够看到一位大神在网页中公开的一个关于<CocosStudio 文件解析工具CsdAnalysis>的源码.本人使用稍作改变,由原有的.csd文件转换为C++ ...

  8. java解析五元组_pcap文件解析,并且按照五元组分类

    [实例简介] pcap文件解析,并按照五元组分包,全部用java语言实现. [实例截图] [核心代码] PcapTestZZ ├── PcapTestZ │   ├── 111.206.37.1930 ...

  9. 文件解析库doctotext源码分析

    doctotext中没有make install选项,make后生成可执行文件 在buile目录下面有.so动态库和头文件,需要的可以从这里面拷贝 build/doctotext就是可执行程序. do ...

最新文章

  1. Webex远程网络视频会议使用指南
  2. Nginx之让用户通过用户名密码认证访问web站点
  3. 想成为程序员的话,这些书单必不可少——算法篇
  4. 基于EasyNVR二次开发实现业务需求:直接集成EasyNVR播放页面到自身项目
  5. 山师计算机专业研究生怎么样,山东师范大学有计算机专业硕士吗?
  6. 负数、原码、反码、补码
  7. NAT(网络地址转换)实现方式
  8. PRICAI 2016 论文精选 | 基于车辆优先级优化交通系统的道路分布
  9. 截取年月日在hana中怎么写_SAP HANA跟我学HANA系列之日期函数总结
  10. 计算机和资源管理器的异同,计算机应用基础ex.doc
  11. 细说ip地址与同一网段
  12. 用户故事Invest原则、敏捷与完整的需求
  13. vue移动端实现word在线预览
  14. 腾讯云轻量服务器搭建,腾讯云轻量服务器配置系统镜像自定义建站及安全组配置...
  15. 前端花瓣飘落特效代码
  16. 【CF487E】 Tourists 简易题解
  17. 背包问题(简单回溯)
  18. 一键自动完成 2021 京东/淘宝双 11 活动
  19. 【Unity实战100例】文件压缩Zip和ZIP文件的解压
  20. 【Pandas总结】第八节 Pandas 合并数据集_pd.merge()

热门文章

  1. Qt6以上版本用cmake编译MYSQL驱动
  2. 奶奶走了,永远见不到她了
  3. 《英语播客》系列之二:Nature Podcast
  4. 视频教程-小白学习课程:梯度下降算法与公式详细推导-深度学习
  5. CCF ADL97《图计算》整理
  6. 全双工、半双工、单工有什么区别!
  7. 小程序可不止微信,带你认识百度抖音头条支付宝平台小程序的优势
  8. matlab滤波器在哪,在使用MATLAB进行滤波器设计时,需要注意的是:使用FDAtool工具所设计的滤波器是(    )滤波器。...
  9. ggplot2图形简单绘制
  10. 港科夜闻|2022年QS世界大学学科排名发布,香港科大10个学科位列香港第1世界前50...