【数据压缩2】PNG格式分析

PNG格式分析

一、PNG文件格式概述

​ 流式网络图形格式(Portable Network Graphic Format,PNG)名称来源于非官方的“PNG’s Not GIF”,是一种位图文件(bitmap file)存储格式,读成“ping”。

​ PNG是20世纪90年代中期开始开发的图像文件存储格式,其目的是企图替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性。

​ PNG用来存储灰度图像时,灰度图像的深度可多到16位,存储彩色图像时,彩色图像的深度可多到48位,并且还可存储多到16位的α通道数据。PNG使用从LZ77派生的无损数据压缩算法。

二、PNG基础

1. 文件头

对于一个PNG文件来说,其文件头由固定的字节来描述:

十进制数137 80 78 71 13 10 26 10
十六进制数89 50 4E 47 0D 0A 1A 0A

2. 文件数据块Chunk

1)数据块结构

​ PNG的每一个数据块又可分为四个域,分别为长度、类型、数据域、循环冗余检测

  1. 长度:显示数据字段的长度信息,为4字节无符号整数,故数据长度限制在(2^31-1)字节。

  2. 类型:为4字节数据块类型码,为了便于描述和检查PNG文件,类型代码仅限于大写和小写的ASCII字母。

  3. 数据域:存储按照数据块类型码指定的数据, 该字段可以是长度为零。

  4. 循环冗余检测:一个4字节的CRC(循环冗余校验)计算,在所述块的前面的字节,包括该块类型的代码和数据块的数据字段,但是不包括长度字段。 CRC始终存在,即使不包含数据块。

    名称字节数说明
    长度Length4指定数据块中数据域的长度,其长度不超过(231 -1)字节
    数据块类型码Chunk Type Code4数据块类型码由ASCII字母(A-Z和a-z)组成
    数据块数据Chunk Data可变(应与Length值相等)存储按照Chunk Type Code指定的数据
    循环冗余检测CRC4存储用来检测是否有错误的循环冗余码
2) 数据块分类Chunk Data
a. 关键数据块critical chunk
(1)文件头数据块IHDR

13字节,描述了图片的一些元数据

域名字节数说明
Width4图像宽度
Height4图像高度
Bit depth1比特深度索引(indexed)
彩色图像:1,2,4或8;
灰度图像:1,2,4,8或16;
真彩色图像:8或16
ColorType1表明图像的颜色类型:
0:灰度图像, 1,2,4,8或16;
2:真彩色图像,8或16;
3:索引彩色图像,1,2,4或8
Compression method1压缩方法
Filter method1滤波器方法
Interlace method1非隔行扫描为0、隔行为1
(2)图像数据块IDAT

​ 存放着图像真正的数据信息,在数据流中可包含多个连续顺序的图像数据块。

  • 允许编码器根据需要将压缩的数据流分为多个IDAT块,但它们必须连续出现;
  • 不限定IDAT块的大小,但过短的IDAT块会浪费更多空间;
  • IDAT块可以出现在压缩数据流的任何位置。
(3)调色板数据块PLTE

PLTE数据块是定义图像的调色板信息,PLTE可以包含1~256个调色板信息,每一个调色板信息由3个字节组成,因此调色板数据块所包含的最大字节数为768,调色板的长度应该是3的倍数,否则,这将是一个非法的调色板。

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

颜色字节数说明
Red10黑 255红
Green10黑 255绿
Blue10黑 255蓝
(4)图像结束数据块IEND

12个字节,标志着图像的结束,没有真正的数据内容,因此Length字段为0

IEND数据块字段:00 00 00 00 49 45 4E 44 AE 42 60 82
b. 辅助数据块ancillary chunks

辅助数据块主要包含以下4类、14种:

  • 表示透明信息(Transparency information)的数据块:
    • tRNS chunk(Transparency chunk,透明信息数据块)
      表示色彩空间信息(Colour space information)的数据块:
    • gAMA chunk(Image gamma chunk,图像γ数据块)
    • cHRM chunk(Primary chromaticities chunk,基色和白色度数据块)
    • sRGB chunk(Standard RGB colour space chunk,标准RGB色彩空间数据块)
    • iCCP chunk(Embedded ICC profile chunk)
  • 表示文本信息(Textual information)的数据块:
    • tEXt chunk(Textual data chunk,文本信息数据块)
    • zTXt chunk(Compressed textual data chunk,压缩文本数据块)
    • iTXt chunk(International textual data chunk)
  • 表示其他信息(Miscellaneous information)的数据块:
    • bKGD chunk(Background colour chunk,背景颜色数据块)
    • pHYs chunk(Physical pixel dimensions chunk,物理像素尺寸数据块)
    • sBIT chunk(Significant bits chunk,样本有效位数据块)
    • sPLT chunk(Suggested palette chunk)
    • hIST chunk(Palette histogram chunk,图像直方图数据块)
    • tIME chunk(Image last-modification time chunk,图像最后修改时间数据块)

三、案例分析

panda.png图片如下

在这里插入图片描述

1. 文件头

前8个字节即为PNG文件的固定标识,十六进制数据 89 50 4E 47 0D 0A 1A 0A
在这里插入图片描述

2. 文件数据块

(1)文件头数据块IHDR
含义说明
长度00 00 00 0DIHDR长度13字节
标识该块类型49 48 44 52IHDR标识

在这里插入图片描述

含义说明
00 00 02 19537像素
00 00 01 F5501像素
比特深度082^8=256,即这是一个256色的图像
颜色类型06真彩色图像
压缩方法00LZ77派生算法,目前仅定义了0
滤波00目前仅定义了0
扫描方式00非隔行扫描
CRC5B 74 EC EF循环冗余校验

在这里插入图片描述

(2)辅助数据块—pHYs chunk
含义说明
长度00 00 00 09pHYs长度9字节
标识该块类型70 48 59 73pHYs标识
CRC49 52 24 F0循环冗余校验

在这里插入图片描述

(3)调色板数据块PLTE

本例真彩色图像没有PLTE

(4)图像数据块IDAT

本例包含多个连续的图像数据块。

含义说明
长度00 00 20 00长度8192字节
标识该块类型49 44 41 54IDAT标识

下面8192字节为图像数据
在这里插入图片描述

(5)图像结束数据块IEND

文件最后几个字节固定是00 00 00 00 49 45 4E 44 AE 42 60 82

含义说明
长度00 00 00 00长度0
标识该块类型49 45 4E 44IEND标识
CRCAE 42 60 82循环冗余校验

在这里插入图片描述
参考PNG文件格式详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值