JPEG图片格式简单分析.docx

上传人:b****7 文档编号:9666839 上传时间:2023-02-05 格式:DOCX 页数:11 大小:20.50KB
下载 相关 举报
JPEG图片格式简单分析.docx_第1页
第1页 / 共11页
JPEG图片格式简单分析.docx_第2页
第2页 / 共11页
JPEG图片格式简单分析.docx_第3页
第3页 / 共11页
JPEG图片格式简单分析.docx_第4页
第4页 / 共11页
JPEG图片格式简单分析.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

JPEG图片格式简单分析.docx

《JPEG图片格式简单分析.docx》由会员分享,可在线阅读,更多相关《JPEG图片格式简单分析.docx(11页珍藏版)》请在冰豆网上搜索。

JPEG图片格式简单分析.docx

JPEG图片格式简单分析

对于花花绿绿色彩斑斓的图片,也许里面包含了艺术家的许多心血,但归根结底它就是一个文件,里面写满了16进制代码的一个文件,这些代码的前面一部分可能是介绍了这张图片的一些简单的信息,后面一大部分是它的图像数据。

这个文件的原理简单的就像是一篇小论文,题目,摘要,关键词,正文,参考文献等,那么这篇小论文的具体格式到底是什么呢?

其实很简单,用ultraEdit随便打开一张jpg格式的图片就可以看到,但是要看懂里面的内容也不是一件很容易的事情,那么先看下面转载的这篇文章吧,看完它就会很容易理解JPG的文件格式了。

 

JPEG图片格式简单分析

1、基本常识

微处理机中的存放顺序有正序(bigendian)和逆序(littleendian)之分。

正序存放就是高字节存放在前低字节在后,而逆序存放就是低字节在前高字节在后。

例如,十六进制数为A02B,正序存放就是A02B,逆序存放就是2BA0。

摩托罗拉(Motorola)公司的微处理器使用正序存放,而英特尔(Intel)公司的微处理器使用逆序。

JPEG文件中的字节是按照正序排列的。

 

JPEG委员会在制定JPEG标准时,定义了许多标记(marker)用来区分和识别图像数据及其相关信息,但笔者没有找到JPEG委员会对JPEG文件交换格式的明确定义。

直到1998年12月从分析网上具体的JPG图像来看,使用比较广泛的还是JPEG文件交换格式(JPEGFileInterchangeFormat,JFIF)版本号为1.02。

这是1992年9月由在C-CubeMicrosystems公司工作的EricHamilton提出的。

此外还有TIFFJPEG等格式,但由于这种格式比较复杂,因此大多数应用程序都支持JFIF文件交换格式。

 

JPEG文件使用的颜色空间是CCIR601推荐标准进行的彩色空间(参看第7章)。

在这个彩色空间中,每个分量、每个像素的电平规定为255级,用8位代码表示。

从RGB转换成YCbCr空间时,使用下面的精确的转换关系:

      Y=256*E'y

     Cb=256*[E'Cb]+128

     Cr=256*[E'Cr]+128

其中亮度电平E'y和色差电平E'Cb和E'Cb分别是CCIR601定义的参数。

由于E'y的范围是0~1,E'Cb和E'Cb的范围是-0.5~+0.5,因此Y,Cb和Cr的最大值必须要箝到255。

于是RGB和YCbCr之间的转换关系需要按照下面的方法计算。

(1)从RGB转换成YCbCr

YCbCr(256级)分量可直接从用8位表示的RGB分量计算得到:

     Y=  0.299R+0.587 G +0.114B

   Cb=-0.1687R-0.3313G +0.5   B+128

   Cr=0.5R-0.4187G-0.0813B+128

需要注意的是不是所有图像文件格式都按照R0,G0,B0,……Rn,Gn,Bn的次序存储样本数据,因此在RGB文件转换成JFIF文件时需要首先验证RGB的次序。

(2)从YCbCr转换成RGB

RGB分量可直接从YCbCr(256级)分量计算得到:

    R=Y                +1.402(Cr-128)

     G=Y-0.34414(Cb-128)-0.71414(Cr-128)

     B=Y+1.772(Cb-128)

在JFIF文件格式中,图像样本的存放顺序是从左到右和从上到下。

这就是说JFIF文件中的第一个图像样本是图像左上角的样本。

 

2文件结构

JFIF文件格式直接使用JPEG标准为应用程序定义的许多标记,因此JFIF格式成了事实上JPEG文件交换格式标准。

JPEG的每个标记都是由2个字节组成,其前一个字节是固定值0xFF。

每个标记之前还可以添加数目不限的0xFF填充字节(fillbyte)。

下面是其中的8个标记:

1.SOI 0xD8           图像开始

2.APP00xE0           JFIF应用数据块

3.APPn0xE1-0xEF   其他的应用数据块(n,1~15)

4.DQT 0xDB           量化表

5.SOF00xC0           帧开始

6.DHT 0xC4           霍夫曼(Huffman)表

7.SOS 0xDA           扫描线开始

8.EOI 0xD9           图像结束

为使读者对JPEG定义的标记一目了然,现将JPEG的标记码列于表6-05,并保留英文解释。

表6-05JPEG定义的标记

Symbol

(符号)

CodeAssignment

(标记代码)

Description

(说明)

StartOfFramemarkers,non-hierarchicalHuffmancoding

SOF0

0xFFC0

BaselineDCT

SOF1

0xFFC1

ExtendedsequentialDCT

SOF2

0xFFC2

ProgressiveDCT

SOF3

0xFFC3

Spatial(sequential)lossless

StartOfFramemarkers,hierarchicalHuffmancoding

SOF5

0xFFC5

DifferentialsequentialDCT

SOF6

0xFFC6

DifferentialprogressiveDCT

SOF7

0xFFC7

Differentialspatiallossless

StartOfFramemarkers,non-hierarchicalarithmeticcoding

JPG

0xFFC8

ReservedforJPEGextensions

SOF9

0xFFC9

ExtendedsequentialDCT

SOF10

0xFFCA

ProgressiveDCT

SOF11

0xFFCB

Spatial(sequential)Lossless

StartOfFramemarkers,hierarchicalarithmeticcoding

SOF13

0xFFCD

DifferentialsequentialDCT

SOF14

0xFFCE

DifferentialprogressiveDCT

SOF15

0xFFCF

DifferentialspatialLossless

Huffmantablespecification

DHT

0xFFC4

DefineHuffmantable(s)

arithmeticcodingconditioningspecification

DAC

0xFFCC

Definearithmeticconditioningtable

Restartintervaltermination

RSTm

0xFFD0~0xFFD7

Restartwithmodulo8counterm

Othermarker

SOI

0xFFD8

Startofimage

EOI

0xFFD9

Endofimage

SOS

0xFFDA

Startofscan

DQT

0xFFDB

Definequantizationtable(s)

DNL

0xFFDC

Definenumberoflines

DRI

0xFFDD

Definerestartinterval

DHP

0xFFDE

Definehierarchicalprogression

EXP

0xFFDF

Expandreferenceimage(s)

APPn

0xFFE0~0xFFEF

Reservedforapplicationuse

JPGn

0xFFF0~0xFFFD

ReservedforJPEGextension

COM

0xFFFE

Comment

Reservedmarkers

TEM

0xFF01

Fortemporaryuseinarithmeticcoding

RES

0xFF02~0xFFBF

Reserved

 

JPEG文件由下面的8个部分组成:

(1)图像开始SOI(StartofImage)标记

(2)APP0标记(Marker)

①APP0长度(length)

②标识符(identifier)

③版本号(version)

④X和Y的密度单位(units=0:

无单位;units=1:

点数/英寸;units=2:

点数/厘米)

⑤X方向像素密度(Xdensity)

⑥Y方向像素密度(Ydensity)

⑦缩略图水平像素数目(thumbnailhorizontalpixels)

⑧缩略图垂直像素数目(thumbnailverticalpixels)

⑨缩略图RGB位图(thumbnailRGBbitmap)

(3)APPn标记(Markers),其中n=1~15(任选)

①APPn长度(length)

②由于详细信息(applicationspecificinformation)

(4)一个或者多个量化表DQT(difinequantizationtable)

①量化表长度(quantizationtablelength)

②量化表数目(quantizationtablenumber)

③量化表(quantizationtable)

(5)帧图像开始SOF0(StartofFrame)

①帧开始长度(startofframelength)

②精度(precision),每个颜色分量每个像素的位数(bitsperpixelpercolorcomponent)

③图像高度(imageheight)

④图像宽度(imagewidth)

⑤颜色分量数(numberofcolorcomponents)

⑥对每个颜色分量(foreachcomponent)

∙ID

∙垂直方向的样本因子(verticalsamplefactor)

∙水平方向的样本因子(horizontalsamplefactor)

∙量化表号(quantizationtable#)

(6)一个或者多个霍夫曼表DHT(DifineHuffmanTable)

①霍夫曼表的长度(Huffmantablelength)

②类型、AC或者DC(Type,ACorDC)

③索引(Index)

④位表(bitstable)

⑤值表(valuetable)

(7)扫描开始SOS(StartofScan)

①扫描开始长度(startofscanlength)

②颜色分量数(numberofcolorcomponents)

③每个颜色分量

∙ID

∙交流系数表号(ACtable#)

∙直流系数表号(DCtable#)

④压缩图像数据(compressedimagedata)

(8)图像结束EOI(EndofImage)

表6-06表示了APP0域的详细结构。

有兴趣的读者可通过UltraEdit或者PCTOOLS等工具软件打开一个JPG图像文件,对APP0的结构进行分析和验证。

表6-06JFIF格式中APP0域的详细结构

偏移

长度

内容

块的名称

说明

0

2byte

0xFFD8

(StartofImage,SOI)

图像开始

2

2byte

0xFFE0

APP0(JFIFapplicationsegment)

JFIF应用数据块

4

2bytes

 

lengthofAPP0block

APP0块的长度

6

5bytes

 

"JFIF"+"0"

识别APP0标记

11

1byte

 

主要版本号(如版本1.02中的1)

12

1byte

 

次要版本号(如版本1.02中的02)

13

1byte

 

andYdensities>

X和Y的密度单位

units=0:

无单位

units=1:

点数/英寸

units=2:

点数/厘米

14

2bytes

 

水平方向像素密度

16

2bytes

 

垂直方向像素密度

18

1byte

 

缩略图水平像素数目

19

1byte

 

缩略图垂直像素数目

 

3n

 

缩略RGB位图(n为缩略图的像素数)

 

 

 

OptionalJFIFextensionAPP0markersegment(s)

任选的JFIF扩展APP0标记段

 

……

 

……

 

 

2byte

0xFFD9

(EOI)end-of-file

图像文件结束标记

JPEG图像大多都使用JFIF格式—JPEG文件交换格式(JPEGFileInterchangeFormat,JFIF),现在JFIF格式已经成为JPEG文件交换格式标准。

JPEG的每个标记都是由2个字节组成,其前一个字节是固定值0xFF。

每个标记之前还可以添加数目不限的0xFF填充字节(fillbyte)。

下面是其中的8个标记:

SOI   0xD8     图像开始

APP0   0xE0      JFIF应用数据块

APPn   0xE1–0xEF     其他的应用数据块(n,1~15)

DQT      0xDB     量化表

SOF0     0xC0      帧开始

DHT      0xC4     霍夫曼(Huffman)表

SOS      0xDA     扫描线开始

EOI      0xD9     图像结束

 

SOI=StartOfImage=FFD8

DQT =DefineQuantizationTable=FFDB

APP0=themarkerusedtoidentifyaJPGfilewhichusestheJFIFspecification =FFE0

COM =Comment         =FFFE

DNL =DefineNumberofLines   =FFDC

SOF0=StartOfFrame0=FFC0

DRI =DefineRestartInterval  =FFDD

DHT =DefineHuffmanTable     =FFC4

SOS =StartOfScan   =FFDA  

EOI=EndOfImage=FFD9

 

段的类型:

SOF0:

StartOfFrame0:

FFC0

~~~~~~~~~~~~~~~~~~~~~~~

 –$ff,$c0(SOF0)

 –长度(高字节,低字节),8+components*3

 –数据精度(1byte)每个样本位数,通常是8(大多数软件不支持12和16)

 –图片高度(高字节,低字节),如果不支持DNL就必须>0

 –图片宽度(高字节,低字节),如果不支持DNL就必须>0

 –components数量(1byte),灰度图是1,YCbCr/YIQ彩色图是3,CMYK彩色图

   是4

 –每个component:

3bytes

    –componentid(1=Y,2=Cb,3=Cr,4=I,5=Q)

    –采样系数(bit0-3vert.,4-7hor.)

    –quantizationtable号

 

DRI:

DefineRestartInterval:

FFDD

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 –$ff,$dd(DRI)

 –长度(高字节,低字节),必须是4

 –MCU块的单元中的重新开始间隔(高字节,低字节),

   意思是说,每n个MCU块就有一个RSTn标记.

   第一个标记是RST0,然后是RST1等,RST7后再从RST0重复

 

DQT:

DefineQuantizationTable:

FFDB

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 –$ff,$db(DQT)

 –长度(高字节,低字节)

 –QT信息(1byte):

    bit0..3:

QT号(0..3,否则错误)

    bit4..7:

QT精度,0=8bit,否则16bit

 –n字节的QT,n=64*(精度+1)

 备注:

 –一个单独的DQT段可以包含多个QT,每个都有自己的信息字节

 –当精度=1(16bit),每个字都是高位在前低位在后

 

DAC:

DefineArithmeticTable:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 法律原因,现在的软件不支持arithmetic编码.

 不能生产使用arithmetic编码的JPEG文件

DHT:

DefineHuffmanTable:

FFC4

~~~~~~~~~~~~~~~~~~~~~~~~~~

 –$ff,$c4(DHT)

 –长度(高字节,低字节)

 –HT信息(1byte):

    bit0..3:

HT号(0..3,否则错误)

    bit4  :

HT类型,0=DCtable,1=ACtable

    bit5..7:

必须是0

 –16bytes:

长度是1..16代码的符号数.这16个数的和应该<=256

 –nbytes:

一个包含了按递增次序代码长度排列的符号表

   (n=代码总数)

 备注:

 –一个单独的DHT段可以包含多个HT,每个都有自己的信息字节

 

COM:

注释:

~~~~~~~~~~

 –$ff,$fe(COM)

 –注释长度(高字节,低字节)=L+2

 –注释为长度为L的字符流

SOS:

StartOfScan:

FFDA

~~~~~~~~~~~~~~~~~~~

 –$ff,$da(SOS)

 –长度(高字节,低字节),必须是6+2*(扫描行内组件的数量)

 –扫描行内组件的数量(1byte),必须>=1,<=4(否则是错的)通常是3

 –每个组件:

2bytes

    –componentid(1=Y,2=Cb,3=Cr,4=I,5=Q),见SOF0

    –使用的Huffman表:

       –bit0..3:

ACtable(0..3)

       –bit4..7:

DCtable(0..3)

 –忽略3bytes(?

?

?

 

 –图片数据(一个个扫描行)紧接着SOS段.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1