数据压缩作业——PNG图像文件格式分析

**

数据压缩作业——PNG图像文件格式分析

**

PNG简述

PNG 是可携式网络图像(portable network graphics)的英文缩写。兴起于网络,目的是替代 GIF 和 JPG 格式,其支持的图像颜色非常丰富,是当今常用的图像资源格式。

PNG图像类型

PNG图片主要有三个类型,分别为 PNG 8/ PNG 24 / PNG 32

PNG 8:PNG 8中的8,其实指的是8bits(一个字节),相当于用2^8 (2的8次方)大小来存储一张图片的颜色种类,也就是说PNG 8能存储256种颜色

PNG24:PNG 24中的24,相当于3乘以8 等于 24,就是用三个8bits分别去表示 R(红)、G(绿)、B(蓝)。R,G,B的取值分别从0~255。可以存储256^3=16777216种颜色。其相比于PNG 8的色彩更丰富,同时所占空间也更大。

PNG 32:PNG 32中的32,相当于PNG 24 加上 8bits的透明颜色通道,就相当于R(红)、G(绿)、B(蓝)、A(透明)。比PNG 24多了一个A(透明)。PNG 32能表示跟PNG 24一样多的色彩,并且还支持256种透明的颜色,能表示更加丰富的图片颜色类型。

PNG图像格式

请添加图片描述

PNG 文件由两部分组成,分别是 PNG 文件标志数据块(chunks),数据块分为两类:关键数据块(critical chunk)和辅助数据块(ancillary chunks)
关键数据块在 PNG 文件中是必须有的,而辅助数据块是可选的。

关键数据块

请添加图片描述

关键数据块(critical chunks)由 4 部分组成:文件头数据块(IHDR)、调色板数据块(PLTE)、图像数据块(IDAT)和图像结束数据(IEND)

其中调色板数据块(PLTE)根据图像的色深可选。

辅助数据块

数据块名称允许多个数据块位置
cHRM(基色和白色点数据块)不允许在PLTE和IDAT之前
gAMA(图像γ数据块)允许在PLTE和IDAT之前
iCCP(ICCP)不允许在PLTE之后IDAT之前如果有iCCP,则无 sRGB
sBIT(样本有效位数据块不允许在PLTE和IDAT之前
sRGB(标准RPG颜色)不允许在PLTE之后IDAT之前
bKGD(背景颜色数据块)不允许在PLTE之后IDAT之前
hIST(图像直方图数据块)不允许在PLTE之后IDAT之前
tRNS(图像透明数据块)不允许在PLTE之后IDAT之前
pHYs(物理像素尺寸数据块)不允许不允许在IDAT之前
sPLT(建议调色板)允许允许在IDAT之前
tIME(图像最后修改时间数据块)不允许无限制
iTXt(国际文本数据)允许无限制
tEXt(文本信息数据块)允许无限制
zTXt(压缩文本数据块)允许无限制

PNG图像案例分析

PNG 文件的数据块格式:

请添加图片描述

CRC 循环冗余码生成的计算方式是通过对 Chunk Type Code 和 Chunk Data 中的数据进行计算得到的,计算方式如下:
x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1

使用visual studio的二进制编辑器打开一张PNG图片(选择“打开”中的“打开方式”)
请添加图片描述
读取PNG图片的二进制信息
在这里插入图片描述

首先其第一个数据块的8个字节为8950 4E47 0D0A 1A0A,说明是PNG类型的文件,其中 50 4E 47 对应的 ASCII值是"PNG"。

数据块分析

IHDR数据块

文件头数据块(IHDR)包含有 PNG 文件中存储的图像数据的基本信息。如图像的宽高、色深、颜色类型、压缩方式等。

一个 PNG 文件只能有一个文件头数据块

在这里插入图片描述

sRGB数据块

在这里插入图片描述
分析图像文件中的SRGB数据块中个字段的含义,sRGB的信息由一个字节组成
在这里插入图片描述
本图像文件中的sRGB信息如下:
在这里插入图片描述

gAMA数据块

在这里插入图片描述
通常在sRGB的后面同时写入gAMA数据块(有时候也会有cHRM数据块),为了使得一些不能正确解码sRGB数据块的PNG解码器正确解码。跟在sRGB数据块后面的gAMA数据块和cHRM的正确写法应该如下表所示:
*[图片来源:11.3.3.5 sRGB Standard RGB colour space]

图像中gAMA数据块的结构分析:
在这里插入图片描述

pHYs数据块

在这里插入图片描述
物理像素尺寸数据块(pHYs)是指定像素大小或图像的宽和高的比例

物理像素尺寸数据块(pHYs) 中各字段的含义:
在这里插入图片描述

图像中的物理像素尺寸数据块(pHYs)数据块的结构分析:
在这里插入图片描述

IDAT数据块

在这里插入图片描述
在这里插入图片描述
PNG 的图像数据块(IDAT)存储图像的实际数据,相当于 BMP 图像的图像数据。PNG 可以包含多幅图像,所以 PNG 的图像数据块可能是由一幅图像的数据组成,也可能是由多幅图像的数据组成

图像中的图像数据块(IDAT)的结构分析:
在这里插入图片描述

IEND数据块

在这里插入图片描述
PNG 的图像结束数据(IEND)用来标记 PNG 文件结束,且**必须要放在文件的尾部**。
通常,PNG 图像结束数据(IEND)的十六进制数值都是一样的,如下:
00 00 00 00 49 45 4E 44 AE 42 60 82

图像文件中图像结束数据(IEND)结构分析:
Alt

参考文献

[1]: PNG 图像文件格式解析
[2]:PNG文件格式解析 https://blog.csdn.net/weixin_41926958/article/details/105163016
[3]: PNG图像文件格式解析_png格式解析,png解析-Web开发文档类资源-CSDN文库 https://download.csdn.net/download/foxtigermission/9874988
[4]: PNG、JPEG、BMP等几种图片格式详解(一)—— PNG - 简书 https://www.jianshu.com/p/4d8cace82028

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值