JPEG:
JPEG图片格式组成部分:SOI(文件头)+APP(X)(图像识别信息)+ DQT(定义量化表)+ SOF0(图像基本信息)+ DHT(定义Huffman表) + DRI(定义重新开始间隔)+ SOS(扫描行开始)+ EOI(文件尾)。
------------------
名称 标记码 说明
------------------
SOI D8 文件头
EOI D9 文件尾
SOF0 C0 帧开始(标准 JPEG)
SOF1 C1 同上
DHT C4 定义 Huffman 表(霍夫曼表)
SOS DA 扫描行开始
DQT DB 定义量化表
DRI DD 定义重新开始间隔
APP0 E0 定义交换格式和图像识别信息
DNL DC 标记码
COM FE 注释
JPEG文件是以FFD8开头,FFD9结尾,中间存储着以0xFFE0~0xFFEF 为标志的数据段。
JPEG 文件中有一些形如 "0xFF" 这样的数据,它们被称为"标志(Marker)",它表示 JPEG 信息数据段。元数据Exif 使用 APP1(0xFFE1)标记来避免与JFIF格式的冲突,且每一个 Exif 文件格式都开始于它。格式如:0xFF+Marker Number(1 byte)+Data size(2 bytes)+Data(n bytes)。Data数据符合TIFF格式规范。
PNG:
对于一个PNG文件来说,其文件头总是由位固定的字节来描述的,HEX: 89 50 4E 47 0D 0A 1A 0A,后续由3个以上的PNG的数据块(Chunk)按照特定的顺序组成。
PNG文件中,每个数据块由4个部分组成,如下:
名称 | 字节数 | 说明 |
Length (长度) | 4字节 | 指定数据块中数据域的长度,其长度不超过(231-1)字节 |
Chunk Type Code (数据块类型码) | 4字节 | 数据块类型码由ASCII字母(A-Z和a-z)组成 |
Chunk Data (数据块数据) | 可变长度 | 存储按照Chunk Type Code指定的数据 |
CRC (循环冗余检测) | 4字节 | 存储用来检测是否有错误的循环冗余码 |
PNG图片CHUNK类型有很多,元数据信息存储在eXIf/iTXt/zTXt/tEXt中的某一个数据块中,数据块数据符合TIFF格式规范。其中eXIf数据块存储的直接是TIFF格式的元数据信息。其他txt存储多种信息,以"Raw profile type exif"或者"Raw profile type APP1"开头的,则为exif元数据信息。
tEXt以"Raw profile type exif" + "0x00" +rawText组成。
zTXt是压缩文本内容,以"Raw profile type exif" + "0x00"+"1位压缩标志"+压缩文本组成,解压完是rawText格式。
iTXt既有压缩文本也有不压缩文本,不压缩格式文本和解压完的文本都是rawText格式,iTXt格式如下:
Keyword: 1-79 bytes (character string) Null separator: 1 byte Compression flag: 1 byte Compression method: 1 byte Language tag: 0 or more bytes (character string) Null separator: 1 byte Translated keyword: 0 or more bytes Null separator: 1 byte Text: 0 or more bytes
webp:
以字节序列 "RIFF" 开始,紧接着是4个字节的文件大小(以little-endian格式存储),然后是字节序列 "WEBP"。元数据格式如:"EXIF" + chunksize(4字节) +Data。
DNG:
dng图片本身就是符合TIFF规范的图片。