PNG文件格式解析

 

目录

一、概述

二、文件结构

2.1 PNG数据块

2.2 关键数据块

2.3 辅助数据块

三、实例分析

3.1 头部

3.2 IHDR数据块

3.3 sRGB数据块

3.4 pHYs数据块—表示物理分辨率

3.5 IDAT数据块

3.6 IEND数据块

四、参考资料


一、概述

PNG是20世纪90年代中期开始开发的图像文件存储格式,其目的是替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性。PNG用来存储灰度图像时,灰度图像的深度可多到16位,存储彩色图像时,彩色图像的深度可多到48位,并且还可存储多到16位的α通道数据。PNG使用从LZ77派生的无损数据压缩算法。

二、文件结构

PNG文件头总是由位固定的字节来描述的,HEX: 89 50 4E 47 0D 0A 1A 0A

其中第一个字节0x89超出了ASCII字符的范围,是为了避免软件将PNG文件当做文本文件来处理。一个标准的PNG文件结构由文件头至少3个按照特定的顺序组成的数据块构成。

2.1 PNG数据块

PNG定义了两种类型的数据块,关键数据块(critical chunk)辅助数据块(ancillary chunks)。关键数据块定义了4个标准数据块,每个PNG文件都必须包含它们,PNG读写软件也都必须要支持这些数据块。

数据块结构 

  • 名称 字节数 说明

    Length (长度)

    4字节

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

    Chunk Type Code (数据块类型码)

    4字节

    数据块类型码由ASCII字母(A-Z和a-z)组成

    Chunk Data (数据块数据)

    可变长度

    存储按照Chunk Type Code指定的数据

    CRC (循环冗余检测)

    4字节

    存储用来检测是否有错误的循环冗余码

    CRC(cyclic redundancy check)域中的值是对Chunk Type Code域和Chunk Data域中的数据进行计算得到的。

2.2 关键数据块

2.2.1 IHDR(文件头数据块)

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

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

字段

字节数

说明

Width

4 bytes

图像宽度,以像素为单位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值