JPEG文件头分析

JPEG文件头分析

    • 说明
    • jpeg文件结构
    • jiff和exif的基本样式
    • jiff app0标记段
    • exif app1标记段
    • SOF标记段
    • 解析jpeg
    • 重要段

说明

1 jpeg是一种压缩标准,大幅度缩小数据流,jpeg以FF D8开头,FF D9结束。
2 jpeg图像由多个maker组成,多个maker+compressed组成了jpeg。
3 jiff是一种在万维网上进行jpeg传输的格式,可以理解是对jpeg图片的封装,符合jpeg标准,jiff的maker是app0,记录了图像的基本信息,也可能有缩略图。jiff格式比较老,老式的数码相机使用此格式。
4 exif新比较新的jpeg封装格式,exif的maker是app1,记录了更多的东西,如ISP信息、GPS信息、相机信息,图像旋转等等
5 jiff和exif可以共存,很多jpeg图像都有app0的jiff段和app1的exif段

jpeg文件结构

SOI  0xD8            图像开始
APP0 0xE0            JFIF应用数据块
APPn 0xE1 - 0xEF 其他的应用数据块(n, 1~15)
DQT  0xDB           量化表
SOF0 0xC0            帧开始
DHT  0xC4           霍夫曼(Huffman)表
SOS  0xDA           扫描线开始
EOI  0xD9            图像结束

jiff和exif的基本样式

JPEG文件头分析_第1张图片

jiff app0标记段

JPEG文件头分析_第2张图片

exif app1标记段

JPEG文件头分析_第3张图片

SOF标记段

此标记段解析图像宽高
JPEG文件头分析_第4张图片

解析jpeg

1 libjpeg开源库只能解析jiff格式的jpeg,不过jiff格式比较简单,我们也可以根据格式自己解析。
2 jhead可以解析exif格式的jpeg,exif标记段比较复杂,信息较多,参考了此开源库做了解析。

重要段

1 app0和app1 判断是哪种封装的jpeg(jiff/exif)
2 解析方向,根据app1中的信息解析,jiff不支持方向
3 解析progressive扫描,通过SOFn判断是baseline还是progressive扫描

你可能感兴趣的:(计算机知识)