JPEG系列一 JPEG图片的文件格式

JPEG图片的文件布局

一个典型的EXIF JPEG文件布局:
在这里插入图片描述

JPEG图片的标记

每一个JPEG文件的内容都开始于一个二进制的值 ‘0xFFD8’, 并结束于二进制值’0xFFD9’。

在JPEG的数据中有好几种类似于二进制 0xFFXX 的数据, 它们都统称作 “标记”, 代表了一段JPEG的 信息数据。

在JPEG 格式中, 最开始先是用一些标记来描述数据,然后是放置SOS数据流的起始(Startof Scan) 标记。在SOS标记的后面才是, 存放JPEG图像的数据流并终结于EOI标记。

0xFFD8 的意思是SOI图像起始(Start of image),0xFFD9 则表示 EOI图像结束 (End of image). 这两个特殊的标记的后面都不跟随数据, 而其他的标记在后面则会附带数据。标记的基本格式如下:

0xFF+标记号(1个字节)
数据长度(2个字节)(值为数据长度2字节+n字节)
数据内容(n个字节)

数据长度(2个字节) 是 “Motorola” 的字节顺序, 数据的低位被存放在高地址,也就是BigEndian。

数据长度为数据长度本身的2个字节,加数据内容的n个字节。不包含标记号的2个字节。如果下面的是一个标记的话:
FFC1 00 0C
它就表示这个标记(0xFFC1) 的数据占0x000C(等于12)个字节。‘12’ 包含了 “数据大小” 描述符, 也就是在0x000C后面只有10 个字节大小的数据。

JPEG文件中重要的标记

这里仅列出几个常用标记的标记代码、长度和表示的意义.
SOI,Start of Image,图像开始,2字节,固定值0xFFD8
JEPG APP0 应用程序保留标记0:
在这里插入图片描述
APPn 应用程序保留标记:
在这里插入图片描述
DQT DefineQuantization Table
在这里插入图片描述
JPEG Start ofFrame marker结构,帧图像开始:
在这里插入图片描述
DHT,Difine HuffmanTable,定义哈夫曼表:
在这里插入图片描述
DRI,Define Restart Interval,定义差分编码累计复位的间隔:
在这里插入图片描述
MCU,Minimum Coded Unit,最小编码单元,通常是8x8,8x16或16x16。

JPEG Startof Scan。扫描开始:
在这里插入图片描述
SOS标记之后紧接着就是真正的图像信息了。图像信息直至遇到一个标记代码就自动结束,一般就是以EOI标记表示结束
EOI,End of Image,图像结束。2字节。固定值0xFFD9。
补充说明一下,由于在JPEG文件中0xFF具有标志性的意思,所以在压缩数据流(真正的图像信息)中出现0xFF,就需要作特别处理。

具体方法是,在数据0xFF后添加一个没有意义的0x00。换句话说,如果在图像数据流中遇到0xFF,应该检测其紧接着的字符,如果是

1)0x00,则表示0xFF是图像流的组成部分,需要进行译码;

2)0xD9,则与0xFF组成标记EOI,则图像流结束,同时图像文件结束;

3)0xD0~0xD7,则组成RSTn标记,则要忽视整个RSTn标记,即不对当前0xFF和紧接的0xDn两个字节进行译码,并按RST标记的规则调整译码变量;

4)0xFF,则忽视当前0xFF,对后一个0xFF再作判断;

5)其他数值,则忽视当前0xFF,并保留紧接的此数值用于译码。

JPEG图片中的EXIF 数据

Exif- Exchange Image File Format,是Camera产业联合会发布的,主要目的就是设计一种文件格式,方便交换照片文件的metadata。

Exif使用 APP1(0xFFE1)标记来保存Exif数据,每一个 Exif 文件格式都开始于APP1标记。

Exif按照JPEG的规格在JPEG中插入一些 图像/数字相机 的信息数据以及缩略图像。于是你能通过与JPEG兼容的互联网浏览器/图片浏览器/图像处理等一些软件来查看Exif格式的图像文件,就跟浏览通常的JPEG图像文件一样。

JPEG图片中的压缩图像数据

原始的图像数据量太大,于是几十年前一帮牛人想出来压缩图像数据的JPEG压缩标准。JPEG压缩时有损压缩,但是可以通过调整参数控制压缩率,已得到占空间较小的图片,同时将肉眼可分辨的损失降到最低。

JPEG压缩标准主要涉及到量化表(DQT)和哈夫曼表(DHT),这两种表作为压缩时的字典使用。压缩后的数据存储在SOS标记后。

参考:

http://blog.csdn.net/kickxxx/article/details/8173332

http://www.cnblogs.com/leaven/archive/2010/04/06/1705846.html

http://stackoverflow.com/questions/8748671/jpeg-restart-markers

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值