PNG图片格式分析
WAV文件概述
WAVE(Waveform Audio File Format):是微软与IBM公司所开发在个人电脑存储音频流的编码格式。其采用RIFF(Resource Interchange File Format)文件格式结构,通常用来保存PCM格式的原始音频数据,不对原有文件进行压缩,所以在音质方面无失真情况。(未压缩)
文件组成
WAV文件主要由以下三部分组成:
- RIFF Chunk:文件标识符,WAV身份判断
- FORMAT Chunk:文件参数模块
- DATA Chunk:实际数据块
此外,文件中还可能包含一些可选的区块,如:Fack Chunk、Cue Points Chunk等,只有通过某些软件进行转化的过程中可能会加入该子块,其主要存储一些关于该文件的重要信息(如压缩编码信息等)
WAVE文件是以RIFF(Resource Interchange File Format, 资源交互文件格式)格式来组织内部结构的,在了解WAV文件之前,我们首先对RIFF格式进行简单了解。
RIFF格式
RIFF文件的基本组成类似于树形结构,其基本构成单元是chunk。
chunk表示数据的一个基本逻辑单元,例如视频的一帧数据、音频的一帧数据等等。
每个chunk包含FOURCC,用于标识chunk ID或chunk 类型;chunk中数据域长度(Size)以及数据域(data Field)。
RIFF格式允许chunk嵌套,但只有ID为“RIFF”或者“LIST”的chunk允许拥有子块,其它的块不允许包含子块。即:RIFF文件第一个chunk开头标识符必须为RIFF,LIST的chunk只能表示subchunk。
如下图所示,RIFFchunk,ID固定为RIFF,size为数据域的长度,数据域中包裹一个Listchunk。
数据域开头的Form Type用于说明数据域的格式,比如“WAV”、“AVI”等。接着包含一个子块List chunk。
List chunk中,ID固定为LIST,size为数据域的长度,数据域中的包裹一个子块。listchunk数据域开头四字节码List Type,用于说明LIST数据域的数据内容。
subchunk中,ID为chunk类型,size为子块数据域的长度,数据域存储文件数据。
RIFF chunk
可以理解为WAVE文件的标识符,表示该文件是否符合 RIFF 格式。WAVE文件的
名称 | 字节数(字节) | 说明 |
---|---|---|
RIFF | 4 | 52 49 46 46 |
Chunksize | 4 | 表示整个wav文件的数据大小 |
Format | 4 | 4字节 |
PNG文件属名域 | PNG数据块 | PNG数据块 | … | PNG数据块 |
---|
图片实例讲解
文件署名域
PNG文件署名域由固定的8字节表示,用于识别该文件类别,例如上周TIFF格式里写到的“图像文件头IFH”
固定的8字节为: ‘89 50 4E 47 0D 0A 1A 0A’
实例讲解
参考文献
(和TIFF格式一样,PNG也有白皮书)PNG文件格式白皮书:www.w3.org