PNG编解码算法详解
发布网友
发布时间:2024-09-29 09:20
我来回答
共1个回答
热心网友
时间:2024-12-04 09:22
PNG是便携式网络图型(Portable Network Graphics)的缩写,因其透明通道、无损压缩特性,广泛应用于设计、游戏、网页、app开发中。PNG与GIF格式有较大关联,其压缩过程无损,可准确还原图像,封装多种pixfmt格式数据,是一种可扩展的封装格式。PNG文件由一个8字节的PNG文件署名、按照特定结构组织的多个数据块组成。关键数据块定义了4个标准数据块,每个PNG文件都必须包含它们。PNG文件包含四个典型数据块,增加acTL、fcTL、fdAT即形成APNG动图格式。
每个数据块按特定方式排列,包括数据块长度、块类型、块数据和CRC校验码。一个典型的PNG文件的十六进制表示如下:
(1)PNG signature:0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A
(2)IHDR:文件头数据块包含PNG文件中存储的图像数据的基本信息,包括分辨率、比特深度、色彩模式、压缩方法,必须作为第一个数据块出现在PNG数据流中,且一个PNG数据流中只能有一个文件头数据块。
(3)IDAT:图像数据块存储实际的数据,数据流中可包含多个连续顺序的图像数据块。IDAT存放着图像真正的数据信息。
(4)IEND:图像结束数据用来标记PNG文件或数据流已结束,且必须放在文件尾部。
IDAT的压缩过程包括Filter和deflate两部分。Filter对像素进行过滤,无压缩损失,通过差分编码减少存储所需的比特数。deflate算法结合了LZ77和Hoffman算法,用于像素数据压缩,通过字典方式压缩数据,以标记代替重复字符。
对于PNG格式数据,实际项目应用可选择opencv、libpng等库进行编解码。PNG格式提供了丰富的功能和兼容性,适用于各种图像处理和存储需求。