JPG图片文件结构分析

合集下载

JPG文件结构

JPG文件结构

JPG文件结构JPEG文件由八个部分组成,每个部分的标记字节为两个,首字节固定为:0xFF,当然,准许在其前面再填充多个0xFF,以最后一个为准。

下面为各部分的名称和第二个标记字节的数值,用ultraedit的16进制搜索功能可找到各部分的起始位置,在嵌入式系统中可用类似的数值匹配法定位。

一、图像开始SOI(Start of Image)标记,数值0xD8二、APP0标记(Marker),数值0xE01、APP0长度(length) 2byte2、标识符(identifier) 5byte3、版本号(version) 2byte4、X和Y的密度单位(units=0:无单位;units=1:点数/英寸;units=2:点数/厘米) 1byte5、X方向像素密度(X density) 2byte6、Y方向像素密度(Y density) 2byte7、缩略图水平像素数目(thumbnail horizontal pixels) 1byte8、缩略图垂直像素数目(thumbnail vertical pixels) 1byte9、缩略图RGB位图(thumbnail RGB bitmap),由前面的数值决定,取值3n,n为缩略图总像素3n byte三、APPn标记(Markers),其中n=1~15,数值对应0xE1~0xEF1、APPn长度(length)2、应用细节信息(application specific information)四、一个或者多个量化表DQT(difine quantization table),数值0xDB1、量化表长度(quantization table length)2、量化表数目(quantization table number)3、量化表(quantization table)五、帧图像开始SOF0(Start of Frame),数值0xC01、帧开始长度(start of frame length)2、精度(precision),每个颜色分量每个像素的位数(bits per pixel per color component)3、图像高度(image height)4、图像宽度(image width)5、颜色分量数(number of color components)6、对每个颜色分量(for each component)包括:ID、垂直方向的样本因子(vertical sample factor)、水平方向的样本因子(horizontal sample factor) 、量化表号(quantization table#)六、一个或者多个霍夫曼表DHT(Difine Huffman Table),数值0xC41、霍夫曼表的长度(Huffman table length)2、类型、AC或者DC(Type, AC or DC)3、索引(Index)4、位表(bits table)5、值表(value table)七、扫描开始SOS(Start of Scan),数值0xDA1、扫描开始长度(start of scan length)2、颜色分量数(number of color components)3、每个颜色分量包括:ID、交流系数表号(AC table #)、直流系数表号(DC table #)4、压缩图像数据(compressed image data)八、图像结束EOI(End of Image),数值0xD9。

JPEGExifTIFF格式解读(1):JEPG图片压缩与存储原理分析

JPEGExifTIFF格式解读(1):JEPG图片压缩与存储原理分析

JPEGExifTIFF格式解读(1):JEPG图⽚压缩与存储原理分析JPEG⽂件简介JPEG的全称是JointPhotographicExpertsGroup(联合图像专家⼩组),它是⼀种常⽤的图像存储格式, jpg/jpeg是24位的图像⽂件格式,也是⼀种⾼效率的压缩格式,⽂件格式是JPEG(联合图像专家组)标准的产物,该图像压缩标准是国际电信联盟(International Telecommunication Union,ITU)、国际标准化组织(International Organization for Standardization,ISO)和国际电⼯委员会(International Electrotechnical Commission,IEC)共同制定。

JPEG标准正式地称为ISO/IEC IS(国际标准)10918-1:连续⾊调静态图像数字压缩和编码(Digital Compression and Coding of Continuous-tone Still Images)和ITU-T建议T.81。

JPEG是第⼀个国际图像压缩标准,⽤于连续⾊调静态图像(即包括灰度图像和彩⾊图像),其最初⽬的是使⽤64Kbps的通信线路传输720×576 分辨率压缩后的图像。

通过损失极少的分辨率,可以将图像所需存储量减少⾄原⼤⼩的10%。

由于其⾼效的压缩效率和标准化要求,⽬前已⼴泛⽤于彩⾊传真、静⽌图像、电话会议、印刷及新闻图⽚的传送上。

但那些被删除的资料⽆法在解压时还原,所以* .jpg/.jpeg ⽂件并不适合放⼤观看,输出成印刷品时品质也会受到影响。

JPEG⽂件格式JPEG的⽂件格式⼀般有两种⽂件扩展名:.jpg和.jpeg,这两种扩展名的实质是相同的,我们可以把.jpg的⽂件改名为.jpeg,⽽对⽂件本⾝不会有任何影响。

严格来讲,JPEG的⽂件扩展名应该为.jpeg,由于DOS时代的8.3⽂件名命名原则,就使⽤了.jpg的扩展名,这种情况类似于.htm和.html的区别。

JPEG原理详细

JPEG原理详细

JPEG原理详细JPEG 是 Joint Photographic Experts Group 的缩写,即 ISO 和 IEC 联合图像专家组,负责静态图像压缩标准的制定,这个专家组开发的算法就被称为 JPEG 算法,并且已经成为了大家通用的标准,即 JPEG 标准。

JPEG 压缩是有损压缩,但这个损失的部分是人的视觉不容易察觉到的部分,它充分利用了人眼对计算机色彩中的高频信息部分不敏感的特点,来大大节省了需要处理的数据信息。

人眼对构成图像的不同频率成分具有不同的敏感度,这个是由人眼的视觉生理特性所决定的。

如人的眼睛含有对亮度敏感的柱状细胞1.8亿个,含有对色彩敏感的椎状细胞0.08亿个,由于柱状细胞的数量远大于椎状细胞,所以眼睛对亮度的敏感程度要大于对色彩的敏感程度。

总体来说,一个原始图像信息,要对其进行 JPEG 编码,过程分两大步: 1、去除视觉上的多余信息,即空间冗余度 2、去除数据本身的多余信息,即结构(静态)冗余度 1、去除视觉上的多余信息 当你拿到一个原始未经处理的图像,是由各种色彩组成的,即在一个平面上,有各种色彩,而这个平面是由水平和垂直方向上的很多点组成的。

实际上,每个点的色彩,也即计算机能表示的每个像素点的色彩,能分解成红、绿、蓝,即 RGB 三元色来表示,即这三种颜色的一定比例的混合就能得到一个实际的色彩值。

所以,实际上,这个平面的图像,可以理解为除了水平 X 和垂直 Y 以外,还有一个色彩值的 Z 的三维的系统。

Z 代表了三元色中各个分支 R/G/B 的混合时所占的具体数值大小,每个像素的 RGB 的混合值可能都有所不同,各个值有大有小,但临近的两个点的 R/G/B 三个值会比较接近。

由于这个原始图像是由很多个独立的像素点组成的,也就是说它们都是分散的,离散的。

比如有些图像的尺寸为640X480,就表示水平有640个像素点,垂直有480个像素点。

从上面的内容,我们可以知道两个相邻的点,会有很多的色彩是很接近的,那么如何能在最后得到的图片中,尽量少得记录这些不需要的数据,也即达到了压缩的效果。

jpg原理

jpg原理

jpg原理
JPG是一种常用的图像压缩格式,其原理是基于离散余弦变换(Discrete Cosine Transform, DCT)和量化(Quantization)技术。

首先,JPG将图像分为8×8的小块,对每个小块进行DCT变换。

DCT变换可以将图像的空域信息转换成频域信息,使得大部分图像信息压缩在低频系数中,而高频系数则表示图像细节。

通过DCT变换,我们可以得到一个8×8的矩阵,其中各个元素代表该频域上的频率分量强度。

接下来,JPG将DCT后的矩阵进行量化。

量化的目的是通过舍弃高频部分的细节信息来减少数据量,从而实现图像压缩。

在量化过程中,JPG使用了一个量化表,其中存储了用于量化不同频率分量的量化系数。

量化表的设计是JPEG标准的重要部分,不同的量化表可以用于不同的应用场景,以平衡压缩比和图像质量。

最后,JPG对量化后的矩阵进行熵编码。

熵编码是一种无损压缩算法,它利用字符出现的频率来构建编码表,将出现频率较高的字符用较短的二进制码表示,而出现频率较低的字符用较长的二进制码表示。

熵编码可以进一步压缩数据量,提高压缩比。

解码时,JPG会反向进行熵解码、逆量化和逆DCT处理,最终恢复出原始的图像数据。

总之,JPG图像的压缩原理是通过DCT变换将图像转换为频域信息,然后进行量化和熵编码来减少数据量。

解码时,通过逆向的过程将压缩后的数据恢复为原始图像。

JPG文件结构分析

JPG文件结构分析

JPG文件结构分析JPG(Joint Photographic Experts Group)是一种常见的图像文件格式,以其高压缩比和图像质量而闻名。

在本文中,将对JPG文件的结构进行分析。

1.文件头:JPG文件头部包含固定的标识符,用于识别文件类型。

通常,JPG文件的文件头为16个字节,其中包括"FFD8"的起始标志。

2.数据段:JPG文件的数据段是由多个标记组成的。

每个标记都由两个字节的起始标志"FF"和一个标记标识符组成。

标记标识符指示了将要跟随的数据类型或操作。

数据段中常见的标记包括APP0、DQT、SOF0、DHT、SOS等。

其中,APP0标记包含一些额外的信息,如JFIF(JPEG文件交换格式)版本号和文件创作的设备。

DQT(量化表定义)标记包含了量化表,这些表用于调整图像的颜色分辨率。

SOF0(帧头)标记包含了图像的宽度、高度以及色彩模式等信息。

DHT(霍夫曼表定义)标记包含了JPEG压缩算法所使用的霍夫曼编码表。

SOS(扫描开始)标记表示图像的实际数据开始。

3.图像数据:JPG文件的图像数据是压缩后的二进制流。

图像数据通常由几个扫描组成,每个扫描都由一个起始标记和相应的数据组成。

扫描包含的数据进行了特殊的编码处理,以实现高压缩比。

压缩算法主要包括离散余弦变换和霍夫曼编码。

在离散余弦变换中,图像被划分成8x8的块,每个块进行离散余弦变换,然后进行量化。

量化后的数据通过霍夫曼编码进行压缩。

4.文件尾:JPG文件尾部由一个16位的结束标记"FFD9"组成,用于表示图像数据的结束。

在JPG文件结构中,数据段是最重要的部分。

它包含了图像的所有信息,包括压缩参数、颜色信息和压缩后的图像数据。

图像数据经过JPEG压缩算法,可以有效地减小文件大小,并保持较高的图像质量。

总结起来,JPG文件的结构包括文件头、数据段、图像数据和文件尾。

数据段是JPG文件最重要的部分,包含了图像的所有信息和压缩后的图像数据。

JPEG文件格式简单分析.

JPEG文件格式简单分析.

摘要:这篇文章大体上介绍了JPEG文件的结构信息以及它的压缩算法和编码方式。

使读者能够对JPEG文件格式有大体上的了解。

为读者进一步进行学习JPEG文件压缩做好准备关键字:十六进制,段格式,编码一、JPEG文件格式概述:图像和动画的存储方式是一个很重要的问题。

幸好我们有了数据压缩,有了JPEG等多种压缩存储图像的文件格式,我们今天才能够拿着小小的一个存储器,却存上许多张色彩鲜艳的图片。

如果没有图像压缩算法,也许我们的多媒体时代就会晚到来许多年。

JPEG图像存储格式一个比较成熟的图像有损压缩格式,虽然一个图片经过转化为JPEG图像后,一些数据会丢失,但是,人眼是很不容易分辨出来这种差别的。

也就是说,JPEG图像存储格式既满足了人眼对色彩和分辨率的要求,又适当的去除了图像中很难被人眼所分辨出的色彩,在图像的清晰与大小中JPEG找到了一个很好的平衡点。

虽然图像转化为JPEG格式会减小很多,但是并不是文件就变得简单了,相反,JPEG文件的格式是比较复杂的。

不经过认真地分析,是不容易弄懂它的。

二、JPEG文件的存储方式:JPEG文件的格式是分为一个一个的段来存储的(但并不是全部都是段),段的多少和长度并不是一定的。

只要包含了足够的信息,该JPEG文件就能够被打开,呈现给人们。

JPEG文件的每个段都一定包含两部分一个是段的标识,它由两个字节构成:第一个字节是十六进制0xFF,第二个字节对于不同的段,这个值是不同的。

紧接着的两个字节存放的是这个段的长度(除了前面的两个字节0xFF和0xXX,X表示不确定。

他们是不算到段的长度中的)。

注意:这个长度的表示方法是按照高位在前,低位在后的,与Intel的表示方法不同。

比方说一个段的长度是0x12AB,那么它会按照0x12,0xAB的顺序存储。

但是如果按照Intel的方式:高位在后,低位在前的方式会存储成0xAB,0x12,而这样的存储方法对于JPEG是不对的。

这样的话如果一个程序不认识JPEG文件某个段,它就可以读取后两个字节,得到这个段的长度,并跳过忽略它。

JPG图片文件结构分析.docx

JPG图片文件结构分析.docx

JPG文件结构分析2010-04-06 22:32【转自网络作者:一江秋水】一、简述JPEG是一个压缩标准,又可分为标准 JPEG、渐进式JPEG及JPEG2000三种:①标准JPEG:以24位颜色存储单个光栅图像,是与平台无关的格式,支持最高级别的压缩,不过,这种压缩是有损耗的。

此类型图片在网页下载时只能由上而下依序显示图片,直到图片资料全部下载完毕,才能看到全貌。

②渐进式 JPEG:渐进式JPG为标准JPG的改良格式,支持交错,可以在网页下载时,先呈现出图片的粗略外观后,再慢慢地呈现出完整的内容,渐进式JPG的文件比标准JPG的文件要来得小。

③JPEG2000:新一代的影像压缩法,压缩品质更好,其压缩率比标准JPEG高约30%左右,同时支持有损和无损压缩。

一个极其重要的特征在于它能实现渐进传输,即先传输图像的轮廓,然后逐步传输数据,让图像由朦胧到清晰显示。

以一幅24 位彩色图像为例,JPEG的压缩分为四个步骤:①颜色转换:在将彩色图像进行压缩之前,必须先对颜色模式进行数据转换。

转换完成之后还需要进行数据采样。

②DCT变换:是将图像信号在频率域上进行变换,分离出高频和低频信息的处理过程,然后再对图像的高频部分(即图像细节)进行压缩。

首先以象素为单位将图像划分为多个8×8的矩阵,然后对每一个矩阵作DCT 变换。

把8×8的象素矩阵变成8×8的频率系数矩阵(所谓频率就是颜色改变的速度),频率系数都是浮点数。

③量化:由于下面第四步编码过程中使用的码本都是整数,因此要对频率系数进行量化,将之转换为整数。

数据量化后,矩阵中的数据都是近似值,和原始图像数据之间有了差异,这一差异是造成图像压缩后失真的主要原因。

这一过程中,质量因子的选取至为重要。

值选得大,可以大幅度提高压缩比,但是图像质量就比较差,质量因子越小图像重建质量越好,但是压缩比越低。

④编码:编码是基于统计特性的方法。

四个步骤都完成后的JPEG文件,其基本数据结构为两大类型:“段”和经过压缩编码的图像数据。

JPEG图像数据格式简明分析

JPEG图像数据格式简明分析

总结
总的来说,JPEG图像数据格式凭借其高压缩比、兼容性强和适用范围广等优 点,成为图像处理、数字摄影、网络传输和科学数据可视化等领域的首选格式。 然而,我们也应意识到其存在的损失细节和速度较慢等缺点。未来,随着技术的 不断发展和新的图像格式的出现,JPEG可能会面临挑战。但就目前而言,JPEG仍 然是图像处理和存储领域的重要支柱。
3、离散余弦变换:接下来,图像数据将经过离散余弦变换(DCT)。DCT将 图像的像素值从空间域转换到频域,使得图像的能量集中在一些低频区域。
4、量化和编码:在完成DCT后,JPEG算法对DCT系数进行量化,将它们转换 为更小的值。然后对这些值进行编码,以产生最终的压缩数据。编码过程中使用 的哈夫曼编码(Huffman Coding)是一种无损压缩技术,它可以根据数据的统计 特性来生成更短的编码。
%读取原始图像
%将原始图像转换为灰度图像
%对灰度图像进行DCT变换
%设定量化表
quantization_table = [16 11 10 16 24 40 51 61;
12 12 14 19 26 58 60 55;
14 13 16 24 40 57 69 56;
14 17 22 29 51 87 80 62;
参考内容
JPEG静态图像压缩算法是一种重要的数字图像处理技术,它通过去除图像中 的冗余信息来减小图像的文件大小,从而方便了图像的存储和传输。JPEG算法采 用了一种基于离散余弦变换(DCT)的压缩方法,将图像数据转化为一种更有效 的表示形式,从而实现了图像的压缩。
JPEG算法主要由以下几个步骤构成:
组成结构
JPEG图像数据格式的组成结构包括三个主要部分:头部、图像部分和尾部。 头部包含关于图像的一些基本信息,如文件号、量化表、色彩空间等。图像部分 是实际的图像数据,包括经DCT变换和量化的像素值。尾部包含一些附加信息, 如压缩方法、图像大小等。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

JPG文件结构分析
2010-04-06 22:32
【转自网络作者:一江秋水】
一、简述
JPEG是一个压缩标准,又可分为标准 JPEG、渐进式JPEG及JPEG2000三种:
①标准JPEG:以24位颜色存储单个光栅图像,是与平台无关的格式,支持最高级别的压缩,不过,这种压缩是有损耗的。

此类型图片在网页下载时只能由上而下依序显示图片,直到图片资料全部下载完毕,才能看到全貌。

②渐进式 JPEG:渐进式JPG为标准JPG的改良格式,支持交错,可以在网页下载时,先呈现出图片的粗略外观后,再慢慢地呈现出完整的内容,渐进式JPG
的文件比标准JPG的文件要来得小。

③JPEG2000:新一代的影像压缩法,压缩品质更好,其压缩率比标准JPEG高约30%左右,同时支持有损和无损压缩。

一个极其重要的特征在于它能实现渐进传输,即先传输图像的轮廓,然后逐步传输数据,让图像由朦胧到清晰显示。

以一幅24 位彩色图像为例,JPEG的压缩分为四个步骤:
①颜色转换:在将彩色图像进行压缩之前,必须先对颜色模式进行数据转换。

转换完成之后还需要进行数据采样。

②DCT变换:是将图像信号在频率域上进行变换,分离出高频和低频信息的处理过程,然后再对图像的高频部分(即图像细节)进行压缩。

首先以象素为单位将图像划分为多个8×8的矩阵,然后对每一个矩阵作DCT 变换。

把8×8的象素矩阵变成8×8的频率系数矩阵(所谓频率就是颜色改变的速度),频率系数都是浮点数。

③量化:由于下面第四步编码过程中使用的码本都是整数,因此要对频率系数进行量化,将之转换为整数。

数据量化后,矩阵中的数据都是近似值,和原始图像数据之间有了差异,这一差异是造成图像压缩后失真的主要原因。

这一过程中,质量因子的选取至为重要。

值选得大,可以大幅度提高压缩比,但是图像质量就比较差,质量因子越小图像重建质量越好,但是压缩比越低。

④编码:编码是基于统计特性的方法。

四个步骤都完成后的JPEG文件,其基本数据结构为两大类型:“段”和经过压缩编码的图像数据。

二、数据结构
1.段的一般结构如下表所示:
表1:段的一般结构
-----------------------------------------------------------------
名称字节数数据说明
-----------------------------------------------------------------
段标识 1 FF 每个新段的开始标识
段类型 1 类型编码(称作“标记码”)
段长度 2 包括段内容和段长度本身,不包括段标识和段类型
段内容≤65533字节
-----------------------------------------------------------------
说明:
①JPG文件中所有关于宽度高度长度间隔这一类数据,凡是>1字节的,均采用Motorola格式,即:高位在前,低位在后。

② 有些段没有长度描述也没有内容,只有段标识和段类型。

文件头和文件尾均属于这种段。

③段与段之间无论有多少FF都是合法的,这些FF称为“填充字节”,必须被忽略掉。

2.段类型有30种,但只有10种是必须被所有程序识别的,其它的类型都可以忽略。

所以下面只列出这 10种类型。

表2:段类型
---------------------------------------
名称标记码说明
---------------------------------------
SOI D8 文件头
EOI D9 文件尾
SOF0 C0 帧开始(标准 JPEG)
SOF1 C1 同上
DHT C4 定义 Huffman 表(霍夫曼表)
SOS DA 扫描行开始
DQT DB 定义量化表
DRI DD 定义重新开始间隔
APP0 E0 定义交换格式和图像识别信息
COM FE 注释
-----------------------------------------------------------
说明:有的文章也将DNL段(标记码=DC,定义扫描行数)列为必须段。

3.以下按一般JPEG文件的段排列顺序详细介绍各种段的结构:
表3:SOI(文件头)
-----------------
名称字节数值
-----------------
段标识 1 FF
段类型 1 D8
-----------------
说明:这两个字节构成了 JPEG文件头。

表4:APP0(图像识别信息)
--------------------------------------------------------------------------
名称字节数值说明
--------------------------------------------------------------------------
段标识 1 FF
段类型 1 E0
段长度 2 0010 如果有 RGB缩略图就=16+3n
(以下为段内容)
交换格式 5 4A46494600 “JFIF”的ASCII码
主版本号 1
次版本号 1
密度单位 1 0=无单位;1=点数/英寸;2=点数/厘米
X像素密度 2 水平方向的密度
Y像素密度 2 垂直方向的密度
缩略图X像素 1 缩略图水平像素数目
缩略图Y像素 1 缩略图垂直像素数目
(如果“缩略图X像素”和“缩略图Y像素”的值均>0,那么才有下面的数据)RGB缩略图3×n n=缩略图像素总数=缩略图X像素×缩略图Y像素
--------------------------------------------------------------------------
说明:
①JFIF是JPEG File Interchange Format的缩写,即JPEG文件交换格式,另外还有TIFF等格式,很少用
②“如果有RGB缩略图就=16+3n”是什么意思呢?比如说“缩略图X像素”和“缩略图Y像素”的值均为48,就表示有一个48×48像素的缩略图(n=
48×48),缩略图是24位真彩位图,用3个字节来表示一个像素,所以共占用3n个字节。

但大多数JPG文件都没有这个“鸡肋”缩略图。

表 5:COM(注释)
--------------------------------------------------------------------------
名称字节数值说明
--------------------------------------------------------------------------
段标识 1 FF
段类型 1 FE
段长度 2 其值=注释字符的字节数+2
段内容注释字符
--------------------------------------------------------------------------
说明:有的JPEG文件没有这个段。

相关文档
最新文档