【数据压缩】作业2:分析PNG文件

本文介绍了PNG文件的结构,包括文件署名、数据块分类(关键数据块和辅助数据块),重点解析了IHDR和PLTE数据块的作用,以及如何通过FlexHEX验证PNG图像。特别关注了PNG图像数据的存储和校验机制。
摘要由CSDN通过智能技术生成

一.PNG的文件结构

PNG图像格式由文件署名数据块(chunk)组成

二.判断PNG文件

PNG文件署名域可用来识别该文件是否为PNG文件。

注:PNG文件的文件署名为固定的 89 50 4E 47 0D 0A 1A 0A

本次作业采用PNG图片为:

用FlexHEX打开该PNG图片后,得到:

可知该图片文件确为PNG图像格式。

三.数据块的分类及其格式

PNG文件含有关键数据块(critical chunk)和辅助数据块(ancillary chunks)两种类型的数据块 ,每个数据块由4个部分组成。

名称字节数说明
Length(长度)4指定数据块中数据域的长度,其长度不超过(2^{31}-1)字节
Chunk Type Code(数据块类型码)4数据块类型码由ASCII字母(A-Z和a-z)组成
Chunk Data(数据块数据)可变长度存储按照Chunk Type Code指定的数据
CRC(循环校验码)4存储用来检测是否有错误的循环冗余码

1.关键数据块及其作用

PNG关键数据块中有4个标准数据块

1)文件头数据块IHDR

IHDR包含PNG文件中存储的图像数据的基本信息,是PNG数据流中的第一个数据块,并且每个PNG数据流中有且只能有一个IHDR,大小为13bytes。

其组成为:

名称字节数说明
Width4图像宽度,以像素为单位
Height4图像高度,以像素为单位
Bit depth1

图像深度:

索引彩色图像:1,2,4,8

灰度图像:1,2,4,8,16

真彩色图像:8,16

Color Type1

颜色类型:

0:灰度图像,1,2,4,8,16

2:真彩色图像,8,16

3:索引彩色图像,1,2,4,8

4:带α通道数据的灰度图像,8,16

6:带α通道数据的真彩色图像,8,16

Compression method1压缩方法(LZ77)派生算法
Filter method1滤波器方法
Interlace method1

隔行扫描方法:

0:非隔行扫描方法

1:Adam7

在本次作业采用的PNG文件对应的二进制文件中对应位置的数据:

名称数值说明
Length大小为0×0D,与IHDR的13字节对应,说明此数据块确实是IHDR数据块
Chunk Type Code表明该数据块是IHDR数据块
Width图像宽度为0×0438,即1080像素
Height图像高度为0×0438,即1080像素
Bit depth图像深度为8位
Color Type颜色类型为0×06,即图像为带α通道数据的真彩色图像
Compression method0x00
Filter method0x00
Interlace method0x00
CRCEC 10 6C 8F

 2)调色板数据块PLTE

PLTE包含有与索引彩色图像相关的彩色变换数据,它仅与索引彩色图像有关,而且放在图像数据块之前。

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

颜色字节意义
Red10=黑,255=红
Green10=黑,255=绿
Blue10=黑,255=蓝

 由于本次作业采用的PNG文件是带α通道数据的真彩色图像,故没有调色板数据块。

但对于索引图象,调色板信息是必须的。

PNG图像不合法的情况:调色板的长度不是3的倍数;调色板的颜色数超过了色深中规定的颜色数(假如颜色数为n,则调色板的颜色数不得超过2^{n}

3)图像数据块IDAT

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

4)图像结束数据IEND

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

规定为:00 00 00 00 49 45 4E 44 AE 42 60 82

本次作业采用的例子: 

 与IEND一致。

2.辅助数据块

PNG规定了10个辅助数据块

  • 背景颜色数据块BKGD
  • 基色和白色度数据块CHRM
  • 图像γ数据块GAMA
  • 图像直方图数据块HIST
  • 物理像素尺寸数据块PHYS
  • 样本有效位数据块SBIT
  • 文本信息数据块TEXT
  • 图像最后修改时间数据块TIME
  • 图像透明数据块TRNS
  • 压缩文本数据块ZTXT

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值