数据压缩任务五:PNG文件分析

PNG(定义):便携式网络图形是一种无损压缩的位图片形格式,其设计目的是试图替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性。PNG使用从LZ77派生的无损数据压缩算法,一般应用于JAVA程序、网页或S60程序中,原因是它压缩比高,生成文件体积小。
问题:
1.PNG文件是如何组成的?
答:PNG由一个8字节的PNG文件署名域和按照特定结构组织的3个以上的数据块组成。
而其中,PNG定义了两种类型的数据块:关键数据块(必需的数据块)和辅助数据块(可选的数据块)
关键数据块:
关键数据块定义了4个标准数据块,每个PNG文件都必须包含他们,PNG读写软件也都支持这些数据块。
辅助数据块:
辅助数据块包括以下十个定义好的数据块:
背景颜色数据块bKGD(background color)。
基色和白色度数据块cHRM(primary chromaticities and white point)。所谓白色度是指当R=G=B=最大值时在显示器上产生的白色度。
图像γ数据块gAMA(image gamma)。
图像直方图数据块hIST(image histogram)。
物理像素尺寸数据块pHYs(physical pixel dimensions)。
样本有效位数据块sBIT(significant bits)。
文本信息数据块tEXt(textual data)。
图像最后修改时间数据块tIME (image last-modification time)。
图像透明数据块tRNS (transparency)。
压缩文本数据块zTXt (compressed textual data)。
在此之中,每个数据块(无论关键数据块还是辅助数据块)都由四个域组成:
1.length(长度):四字节长,指定数据块中数据域的长度,其长度不超过(2的32(即4byte✖️8bit/byte)次方-1个)字节
2.Chunk Type Code(数据块类型码):四字节长,数据块类型码由ASCII字母(A-Z和a-z)组成
3.Chunk Data(数据块实际内容):可变长度,存储按照Chunk Type Code指定的数据
4.CRC(循环冗余检测):四字节长,存储用来检测是否有错误的循环冗余码,其域中的值是对Chunk Type Code域和Chunk Data域中的数据进行计算得到的,可以看做一种校验码。
2.关键数据块中的四个标准数据块是什么?
(1) 文件头数据块IHDR(header chunk):
文件头数据块包含有PNG文件中存储的图像数据的基本信息,并要作为第一个数据块出现在PNG数据流中,而且一个PNG数据流中只能有一个文件头数据块。共占用13字节。
其中包含以下7个域:
Width:4字节,图像宽度,以像素为单位
Height:4字节,图像高度,以像素为单位
Bit Depth:1字节,图像深度
ColorType:1字节,颜色类型
Compression method:1字节,压缩方法(LZ77派生算法)
Filter method:1字节,滤波器方法
Interlace method:1字节,隔行扫描方法:0:非隔行扫描;1: Adam7(由Adam M. Costello开发的7遍隔行扫描方法)
接下来:本文将以下图为例进行解释:
哎呀~
在这里插入图片描述
如上图所示为IHDR部分的13个字节的内容:
在这里插入图片描述
第一部分:4字节,length,表示本部分一共13字节
在这里插入图片描述
第二部分:4字节,Chunk Type Code,表示四个字母的ascii码,即IHDR
在这里插入图片描述
第三部分:Width&Height:各四字节,表示图片尺寸为700*700
在这里插入图片描述
第四部分Bit Depth&ColorType:各一字节,表示图像深度为8位,颜色类型为带α通道数据的真彩色图像
在这里插入图片描述
第五部分:Compression method&Filter method:均为00,表示没有压缩和滤波操作
在这里插入图片描述
第六部分:Interlace method:为0,表示非隔行扫描
在这里插入图片描述
第七部分:CRC,四字节,循环冗余检测
(2) 调色板数据块PLTE(palette chunk):
它包含有与索引彩色图像((indexed-color image))相关的彩色变换数据,它仅与索引彩色图像有关,而且要放在图像数据块(image data chunk)之前。真彩色的PNG数据流也可以有调色板数据块,目的是便于非真彩色显示程序用它来量化图像数据,从而显示该图像。结构如下:

颜色字节数意义
Red1 byte0 = 黑色, 255 = 红
Green1 byte0 = 黑色, 255 = 绿色
Blue1 byte0 = 黑色, 255 = 蓝色

PLTE数据块是定义图像的调色板信息,PLTE可以包含1~256个调色板信息,每一个调色板信息由3个字节组成,因此调色板数据块所包含的最大字节数为768,调色板的长度应该是3的倍数,否则,这将是一个非法的调色板。
对于索引图像,调色板信息是必须的,调色板的颜色索引从0开始编号,然后是1、2……,调色板的颜色数不能超过色深中规定的颜色数(如图像色深为4的时候,调色板中的颜色数不可以超过2^4=16),否则,这将导致PNG图像不合法。
(由于本图是真彩色图像,所以没有调色板)
(3) 图像数据块IDAT(image data chunk):
图像数据块存储实际的数据,在数据流中可包含多个连续顺序的图像数据块。
IDAT存放着图像真正的数据信息,因此,如果能够了解IDAT的结构,我们就可以很方便的生成PNG图像。
在这里插入图片描述
第一部分:4字节,length:该部分数据块大小为8192字节
在这里插入图片描述
第二部分:4字节,Chunk Type Code,表示四个字母的ascii码,即IDAT
第三部分:8192字节,即数据块大小
(4) 图像结束数据IEND(image trailer chunk):
它用来标记PNG文件或者数据流已经结束,并且必须要放在文件的尾部。
在这里插入图片描述
(PNG文件的结尾12个字符看起来总应该是这样的12个字符,标志PNG文件的结束)
3.PNG的优点和缺点都有哪些?
优点:

  • PNG支持高级别无损耗压缩。
  • PNG支持alpha通道透明度。
  • PNG支持伽玛校正。
  • PNG支持交错。
  • PNG受最新的Web浏览器支持。
    缺点:
  • 较旧的浏览器和程序可能不支持PNG文件。
  • 作为Internet文件格式,与JPEG的有损耗压缩相比,PNG提供的压缩量较少。
  • GIF格式相较于支持多图像文件和动画文件。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值