PNG的百度解释:

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

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

PNG的结构:

PNG图像格式文件(或者称为数据流)由一个8字节的PNG文件署名(PNG file signature)域和按照特定结构组织的3个以上的数据块(chunk)组成。PNG定义了两种类型的数据块,一种是称为关键数据块(critical chunk),这是标准的数据块,另一种叫做辅助数据块(ancillary chunks),这是可选的数据块。关键数据块定义了4个标准数据块,每个PNG文件都必须包含它们,PNG读写软件也都必须要支持这些数据块。虽然PNG文件规范没有要求PNG编译码器对可选数据块进行编码和译码,但规范提倡支持可选数据块。

 PNG的文件格式:

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

PNG的特点:

  1. 使用调色板技术可支持256种颜色的彩色图像。(必须的)
  2. 流式读/写性(streamability):图像文件格式允许连续读出和写入图像数据。(因此适于网络传播)
  3. 逐次逼近显示(progressive display):这种特性可使在通信链路上传输图像文件的同时就在终端上显示图像,把整个轮廓显示出来之后逐步显示图像的细节,也就是先用低分辨率显示图像,然后逐步提高它的分辨率。(类似马赛克逐渐消除的过程)
  4. 透明性(transparency):这个性能可使图像中某些部分不显示出来,用来创建一些有特色的图像。
  5. 辅助信息(ancillary information):这个特性可用来在图像文件中存储一些文本注释信息。(就是可以说一些废话)
  6. 独立于计算机软硬件环境。
  7. 使用无损压缩。(无损!)
  8. 可在一个文件中存储多幅图像。

PNG数据块解析:

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

文件头数据块由13字节组成,它的格式如下表所示。

调色板数据块PLTE(palette chunk)包含有与索引彩色图像(indexed-color image)相关的彩色变换数据,它仅与索引彩色图像有关,而且要放在图像数据块(image data chunk)之前。

PLTE数据块是定义图像的调色板信息,PLTE可以包含1~256个调色板信息,每一个调色板信息由3个字节组成:

此,调色板的长度应该是3的倍数,否则,这将是一个非法的调色板。

对于索引图像,调色板信息是必须的,调色板的颜色索引从0开始编号,然后是1、2……,调色板的颜色数不能超过色深中规定的颜色数(如图像色深为4的时候,调色板中的颜色数不可以超过2^4=16),否则,这将导致PNG图像不合法。

真彩色图像和带alpha通道数据的真彩色图像也可以有调色板数据块,目的是便于非真彩色显示程序用它来量化图像数据,从而显示该图像。

图像数据块IDAT(image data chunk):它存储实际的数据,在数据流中可包含多个连续顺序的图像数据块。

IDAT存放着图像真正的数据信息,因此,如果能够了解IDAT的结构,我们就可以很方便的生成PNG图像。

图像结束数据IEND(image trailer chunk):它用来标记PNG文件或者数据流已经结束,并且必须要放在文件的尾部。

如果我们仔细观察PNG文件,我们会发现,文件的结尾12个字符看起来总应该是这样的:

00 00 00 00 49 45 4E 44 AE 42 60 82

不难明白,由于数据块结构的定义,IEND数据块的长度总是0(00 00 00 00,除非人为加入信息),数据标识总是IEND(49 45 4E 44),因此,CRC码也总是AE 42 60 82。

参考作者:PNG文件格式详解 - maxiongying - 博客园 (cnblogs.com)

PNG的介绍以及PNG文件解析相关推荐

  1. Apache 文件解析漏洞SSRF漏洞原理介绍及代码

    Apache 文件解析漏洞 SSRF漏洞原理介绍及代码 1. Apache 环境简介 2. Apache 解析漏洞介绍 3. 解析漏洞利用演示 4.利用场景介绍 1. Apache 环境简介 ​ Ap ...

  2. Json文件解析(下

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

  3. java 类的存储结构设计_Doris存储层设计介绍1——存储结构设计解析

    1 整体介绍 Doris是基于MPP架构的交互式SQL数据仓库,主要用于解决了近实时的报表和多维分析.Doris高效的导入.查询离不开其存储结构精巧的设计.本文主要通过阅读Doris BE模块代码,详 ...

  4. Android中measure过程、WRAP_CONTENT详解以及 xml布局文件解析流程浅析

    转自:http://www.uml.org.cn/mobiledev/201211221.asp 今天,我着重讲解下如下三个内容: measure过程 WRAP_CONTENT.MATCH_PAREN ...

  5. Android开发历程_18(XML文件解析)

    前言  本文主要介绍在Android中怎样来解析XML文件.主要采用的是SAX机制,SAX全称为Simple API for XML,它既是一种接口,也是一个软件包.作为接口,SAX是事件驱动型XML ...

  6. Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(下)

       本文原创, 转载请注明出处:http://blog.csdn.net/qinjuning 上篇文章<<Android中measure过程.WRAP_CONTENT详解以及xml布局文 ...

  7. Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(上)

    在之前一篇博文中<< Android中View绘制流程以及invalidate()等相关方法分析>> ,简单的阐述 了 Android View 绘制流程的三个步骤,即: 1. ...

  8. Android init.rc文件解析过程详解(三)

    Android init.rc文件解析过程详解(三) 三.相关结构体 1.listnode listnode结构体用于建立双向链表,这种结构广泛用于kernel代码中, android源代码中定义了l ...

  9. Android init.rc文件解析过程详解(一)

        Android init.rc文件解析过程详解(一) 一.init.rc文件结构介绍 init.rc文件基本组成单位是section, section分为三种类型,分别由三个关键字(所谓关键字 ...

  10. java怎么xml文件解析_Java对Xml文件解析

    JAVA 解析 XML 通常有两种方式,DOM 和 SAX. DOM 虽然是 W3C 的标准,提供了标准的解析方式,但它的解析效率一直不尽如人意,因为使用DOM解析XML时,解析器读入整个文档并构建一 ...

最新文章

  1. pip包管理工具-install执行流程简单查看
  2. 电力职称计算机多选,【2017年整理】职称计算机考试Office多选模拟题及答案.doc...
  3. 使用 NCS2 异步推理——人脸识别
  4. HTTP请求报文和HTTP响应报文(转载)
  5. AtCoder AGC032E Modulo Pairing (二分、贪心与结论)
  6. LAN远程重启server安全方法
  7. Pytorch(一) --线性模型
  8. LeetCode 1278. 分割回文串 III(区间DP)
  9. 09 - java 包命名规范
  10. 蜜蜂路线(洛谷P2437题题解,Java语言描述)
  11. 卷积神经网络CNN是靠什么线索学习到深度信息的?
  12. Handler 引起的内存泄露
  13. 窥探源码,让我更加优雅的使用Kafka生产者!
  14. ibm刀片服务器如何装系统,详细分析如何安装和配置IBM刀片服务器
  15. Ubuntu下bin文件的安装
  16. 李宏毅2020机器学习深度学习(完整版)国语课程PPT
  17. java使用ffmpeg完成视频加水印功能
  18. vue 图片画框获取坐标
  19. 安装Oozie4.1.0-CDH版本
  20. 【脚本】get_pixel(用PIL中自带的getpixel,得到单张图像或者某个文件夹中所有图像的P模式index)

热门文章

  1. 工具:dlf 强制删除文件或文件夹
  2. Android 圆角进度条
  3. upnp 文件服务器,windows作为upnp服务器
  4. 【神器】yololib 飘云修改版 -- 给iOS APP 添加导入表注入--你懂的
  5. nxp的bluetooth驱动调试
  6. LaTex 在线编辑网站—overleaf简介
  7. Kettle之定时运行Job
  8. 【蓝桥省赛倒计时】B组Java冲刺打卡(三)
  9. 【 信息搜集的内容,信息搜集的方法,信息搜集的工具,信息搜集结果的利用等】
  10. Flash-制作空心文字