jpeg文件格式

JPEG编码原理及文件格式及代码分析 一 JPEG编码原理 首先我们先来看一下JPEG的编码原理图 如上图所示,下面进行逐步的分析: 1 RGB->YUV 首先为了降低互相的关联性,将RGB转换为YUV,这样就可以对亮度信号和色度信号进行分别的处理 2 零电平偏置下移 由于后面需要对图像进行DCT变换,如果不进行偏移,会使分量值过大,所以在这里采用偏置下移的方法,便于DCT变换量化后直流的系数大大降低,也就降低了数据量。 3 分块 JPEG标准在处理图片时会先把图片分割成一个个8x8像素的方块,源图像如果不是8x8的整数倍,需进行补 阅读详情

JPEG文件由八个部分组成,每个部分的标记字节为两个,首字节固定为:0xFF,当然,准许在其前面再填充多个0xFF,以最后一个为准。下面为各部分的名称和第二个标记字节的数值,用ultraedit的16进制搜索功能可找到各部分的起始位置,在嵌入式系统中可用类似的数值匹配法定位。
一、图像开始SOI(Start of Image)标记,数值0xD8
二、APP0标记(Marker),数值0xE0
1、APP0长度(length)
2、标识符(identifier)
3、版本号(version)
4、X和Y的密度单位(units=0:无单位;units=1:点数/英寸;units=2:点数/厘米)
5、X方向像素密度(X density)
6、Y方向像素密度(Y density)
7、缩略图水平像素数目(thumbnail horizontal pixels)
8、缩略图垂直像素数目(thumbnail vertical pixels)
9、缩略图RGB位图(thumbnail RGB bitmap),由前面的数值决定,取值3n,n为缩略图总像素
三、APPn标记(Markers),其中n=1~15,数值对应0xE1~0xEF   
1、APPn长度(length)
2、应用细节信息(application specific information)
四、一个或者多个量化表DQT(difine quantization table),数值0xDB
1、量化表长度(quantization table length)
2、量化表数目(quantization table number)
3、量化表(quantization table)
五、帧图像开始SOF0(Start of Frame),数值0xC0
1、帧开始长度(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),数值0xC4
1、霍夫曼表的长度(Huffman table length)
2、类型、AC或者DC(Type, AC or DC)
3、索引(Index)
4、位表(bits table)
5、值表(value table)
七、扫描开始SOS(Start of Scan),数值0xDA
1、扫描开始长度(start of scan length)
2、颜色分量数(number of color components)
3、每个颜色分量
包括:ID、交流系数表号(AC table #)、直流系数表号(DC table #)
4、压缩图像数据(compressed image data)
八、图像结束EOI(End of Image),数值0xD9

 

 

实用资料——jpeg文件结构

其它知识 2009-12-08 14:25:17 阅读88 评论0 字号:大中小

微处理机中的存放顺序有正序(big endian)和逆序(little endian)之分。正序存放就是高字节存放在前低字节在后,而逆序存放就是低字节在前高字节在后。例如,十六进制数为A02B,正序存放就是A02B,逆序存放就是2BA0。摩托罗拉(Motorola)公司的微处理器使用正序存放,而英特尔(Intel)公司的微处理器使用逆序。JPEG文件中的字节是按照正序排列的。

JPEG委员会在制定JPEG标准时,定义了许多标记(marker)用来区分和识别图像数据及其相关信息,但笔者没有找到JPEG委员会对JPEG文件交换格式的明确定义。直到1998年12月从分析网上具体的JPG图像来看,使用比较广泛的还是JPEG文件交换格式(JPEG File Interchange Format,JFIF)版本号为1.02。这是1992年9月由在C-Cube Microsystems公司工作的Eric Hamilton提出的。此外还有TIFF JPEG等格式,但由于这种格式比较复杂,因此大多数应用程序都支持JFIF文件交换格式。 JFIF文件格式直接使用JPEG标准为应用程序定义的许多标记,因此JFIF格式成了事实上JPEG文件交换格式标准。JPEG的每个标记都是由2个字节组成,其前一个字节是固定值0xFF。每个标记之前还可以添加数目不限的0xFF填充字节(fill byte)。下面是其中的8个标记:

JPEG的标记码列于下表:

JPEG定义的标记

Symbol

(符号)
 Code Assignment

(标记代码)
 Description

(说明)
 
Start Of Frame markers, non-hierarchical Huffman coding
 
SOF0
 0xFFC0
 Baseline DCT
 
SOF1
 0xFFC1
 Extended sequential DCT
 
SOF2
 0xFFC2
 Progressive DCT
 
SOF3
 0xFFC3
 Spatial (sequential) lossless
 
Start Of Frame markers, hierarchical Huffman coding
 
SOF5
 0xFFC5
 Differential sequential DCT
 
SOF6
 0xFFC6
 Differential progressive DCT
 
SOF7
 0xFFC7
 Differential spatial lossless
 
Start Of Frame markers, non-hierarchical arithmetic coding
 
JPG
 0xFFC8
 Reserved for JPEG extensions
 
SOF9
 0xFFC9
 Extended sequential DCT
 
SOF10
 0xFFCA
 Progressive DCT
 
SOF11
 0xFFCB
 Spatial (sequential) Lossless
 
Start Of Frame markers, hierarchical arithmetic coding
 
SOF13
 0xFFCD
 Differential sequential DCT
 
SOF14
 0xFFCE
 Differential progressive DCT
 
SOF15
 0xFFCF
 Differential spatial Lossless
 
Huffman table specification
 
DHT
 0xFFC4
 Define Huffman table(s)
 
arithmetic coding conditioning specification
 
DAC
 0xFFCC
 Define arithmetic conditioning table
 
Restart interval termination
 
RSTm
 0xFFD0~0xFFD7
 Restart with modulo 8 counter m
 
Other marker
 
SOI
 0xFFD8
 Start of image
 
EOI
 0xFFD9
 End of image
 
SOS
 0xFFDA
 Start of scan
 
DQT
 0xFFDB
 Define quantization table(s)
 
DNL
 0xFFDC
 Define number of lines
 
DRI
 0xFFDD
 Define restart interval
 
DHP
 0xFFDE
 Define hierarchical progression
 
EXP
 0xFFDF
 Expand reference image(s)
 
APPn
 0xFFE0~0xFFEF
 Reserved for application use
 
JPGn
 0xFFF0~0xFFFD
 Reserved for JPEG extension
 
COM
 0xFFFE
 Comment
 
Reserved markers
 
TEM
 0xFF01
 For temporary use in arithmetic coding
 
RES
 0xFF02~0xFFBF
 Reserved
 


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

    (1) 图像开始SOI(Start of Image)标记

    (2) APP0标记(Marker)

        ① APP0长度(length)

        ② 标识符(identifier)

        ③ 版本号(version)

        ④ X和Y的密度单位(units=0:无单位;units=1:点数/英寸;units=2:点数/厘米)

        ⑤ X方向像素密度(X density)

        ⑥ Y方向像素密度(Y density)

        ⑦ 缩略图水平像素数目(thumbnail horizontal pixels)

        ⑧ 缩略图垂直像素数目(thumbnail vertical pixels)

        ⑨ 缩略图RGB位图(thumbnail RGB bitmap)

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

        ① APPn长度(length)

        ② 由于详细信息(application specific information)

    (4) 一个或者多个量化表DQT(difine quantization table)

        ① 量化表长度(quantization table length)

        ② 量化表数目(quantization table number)

        ③ 量化表(quantization table)

    (5) 帧图像开始SOF0(Start of Frame)

        ① 帧开始长度(start of frame length)

        ② 精度(precision),每个颜色分量每个像素的位数(bits per pixel per color component)

        ③ 图像高度(image height)

        ④ 图像宽度(image width)

        ⑤ 颜色分量数(number of color components)

        ⑥ 对每个颜色分量(for each component)

ID
垂直方向的样本因子(vertical sample factor)
水平方向的样本因子(horizontal sample factor)
量化表号(quantization table#)
    (6) 一个或者多个霍夫曼表DHT(Difine Huffman Table)

        ① 霍夫曼表的长度(Huffman table length)

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

        ③ 索引(Index)

        ④ 位表(bits table)

        ⑤ 值表(value table)

    (7) 扫描开始SOS(Start of Scan)

        ① 扫描开始长度(start of scan length)

        ② 颜色分量数(number of color components)

        ③ 每个颜色分量

ID
交流系数表号(AC table #)
直流系数表号(DC table #)
        ④ 压缩图像数据(compressed image data)

    (8) 图像结束EOI(End of Image)

下表表示了APP0域的详细结构。有兴趣可通过UltraEdit或者PC TOOLS等工具软件打开一个JPG图像文件,对APP0的结构进行分析和验证。

JFIF格式中APP0域的详细结构

偏移
 长度
 内容
 块的名称
 说明
 
0
 2 byte
 0xFFD8
 (Start of Image,SOI)
 图像开始
 
2
 2 byte
 0xFFE0
 APP0(JFIF application segment)
 JFIF应用数据块
 
4
 2 bytes
   length of APP0 block
 APP0块的长度
 
6
 5 bytes
   "JFIF"+"0"
 识别APP0标记
 
11
 1 byte
   <Major version>
 主要版本号(如版本1.02中的1)
 
12
 1 byte
   <Minor version>
 次要版本号(如版本1.02中的02)
 
13
 1 byte
   <Units for the X
and Y densities>
 X和Y的密度单位

units=0:无单位

units=1:点数/英寸

units=2:点数/厘米
 
14
 2 bytes
   <Xdensity>
 水平方向像素密度
 
16
 2 bytes
   <Ydensity>
 垂直方向像素密度
 
18
 1 byte
   <Xthumbnail>
 缩略图水平像素数目
 
19
 1 byte
   <Ythumbnail>
 缩略图垂直像素数目
 
  3n
   < Thumbnail RGB bitmap>
 缩略RGB位图(n为缩略图的像素数)
 
      Optional JFIF extension APP0 marker segment(s)
 任选的JFIF扩展APP0标记段
 
  ……
   ……
  
  2 byte
 0xFFD9
 (EOI) end-of-file
 图像文件结束标记
 


    JPEG文件使用的颜色空间是CCIR 601推荐标准进行的彩色空间(参看第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分别是CCIR 601定义的参数。由于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.587G + 0.114B

        Cb = -0.1687R - 0.3313G + 0.5B + 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文件中的第一个图像样本是图像左上角的样本。

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

JPG图片文件结构分析 立即下载

相关推荐

Dify视觉模型节点避坑指南:我用Qwen2.5-VL做OCR识别时踩过的3个坑(及解决方案)

本文分享了使用Dify平台和Qwen2.5-VL视觉模型进行OCR票据识别时遇到的三个常见问题及解决方案,包括文件变量传递、结构化输出和条件分支判断失效。通过实战经验,帮助开发者优化多模态模型在财务自动化中的应用,提升OCR识别精度和效率。

weixin_29284885的博客 406

JPG文件结构分析

JPG文件结构分析 Microsoft Word 文档 一、简述 JPEG是一个压缩标准,又可分为标准 JPEG、渐进式JPEG及JPEG2000三种: ①标准JPEG:以24位颜色存储单个光栅图像,是与平台无关的格式,支持最高级 别的压缩,不过,这种压缩是有损耗的。此类型图片在网页下载时只能由上而下依序显示图片,直到图片资料全部下载完毕,才能看到全貌。 ②渐进式 JPEG:渐进式JPG为标准JPG的改良格式,支持交错,可以在网页下载时,先呈现出图片的粗略外观后,再慢慢地呈现出完整的内容,渐进式JPG的文件

陈铭泉的博客 5337

Android GNSS 模块分析(三)JNI 层

Android GNSS;定位服务;GPS;NMEA协议;LocationManagerService;导航;

Yang_Mao_Shan的博客 5161

jpeg图片格式详解

jpeg图片格式详解1. JPEG文件简介JPEG的全称是JointPhotographicExpertsGroup(联合图像专家小组),它是一种常用的图像存储格式, jpg/jpeg是24位的图像文件格式,也是一种高效率的压缩格式,文件格式是JPEG(联合图像专家组)标准的产物,该标准由ISO与CCI TT(国际电报电话咨询委员会)共同制定,是面向连续色调静止图像的一种压缩标准。其最初目的是使用6

yun_hen的博客 14万+

MLX90640 热成像 STM32

MLX90640 热成像

zhaocundang's blog 5007

高速DAC时钟与配置实战:DAC5681Z硬件设计与寄存器编程详解

在高速数据转换系统中,时钟信号是决定系统性能的核心要素,其稳定性和纯净度直接影响数模转换器(DAC)的输出频谱纯度与动态范围。时钟电路的设计原理涉及信号完整性、阻抗匹配与直流偏置,而内部锁相环(PLL)和延迟锁相环(DLL)的配置则是实现精确时序控制的关键技术。这些技术的价值在于,它们共同保障了高速通信、雷达和任意波形生成等应用对信号实时性与精度的严苛要求。本文聚焦于德州仪器(TI)的DAC5681Z,深入解析其外部时钟输入电路的硬件设计要点,包括端接电阻的计算与选型,并详细拆解通过串行外设接口(SPI)对

weixin_30342363的博客 187

JPG-JPEG(JFIF)文件解码—文件结构

转载请注明:转自 http://blog.youkuaiyun.com/ymlbright  yml_bright@163.com 一、总体结构 JPEG文件使用的数据存储方式有多种。最常用的格式称为JPEG文件交换格式(JPEG File Interchange Format,JFIF)。而JPEG文件大体上由一个个数据段组成,数据段包含:标记码(Tag)、数据长度、数据。

Bright's Blog 1万+

避坑指南:在Ubuntu 22.04上配置UR5e与ROS2 Humble真机通信的完整流程

本文详细介绍了在Ubuntu 22.04上配置UR5e机械臂与ROS2 Humble真机通信的完整流程,包括环境准备、网络配置、URCap安装、ROS2驱动部署及控制器状态验证等关键步骤。特别针对常见问题如网络连接失败、驱动启动错误等提供了实用解决方案,帮助工程师高效完成UR5e与ROS2的集成工作。

weixin_30790841的博客 465

Jpeg文件格式详解

JPEG(Joint Picture Expert Group)编解码标准是由国际标准化组织(ISO)和CCITT联合制定的静态图象有损压缩编码标准(标准也定义了无损压缩内容但是大多数系统都不支持)。JPEG是一种编解码标准不是一种文件格式,其对应的文件格式有JIF,JPEG/JFIF,JPEG/EXIF等。

梦的灰色边沿... 6941

大数据架构中的数据治理:元数据管理与数据血缘追踪实践

本文将聚焦大数据架构中数据治理的两大核心支柱——元数据管理与数据血缘追踪元数据管理的目标、类型与实施步骤(从需求分析到工具落地);数据血缘追踪的技术实现(静态解析、动态捕获、混合方案)与应用场景;如何将两者结合,构建完整的数据治理体系,并通过真实案例展示落地效果。元数据管理:定义了业务/技术/操作元数据,讲解了工具选型(如Apache Atlas)、采集(Hook/API)、存储(关系库+图数据库)、应用(数据发现、质量监控);数据血缘追踪。

欢迎来到我的优快云空间!这里聚焦AI大模型应用实战,分享前沿技术、实战案例与开发经验。 868

网神 SecGate 3600 防火墙 app_av_import_save文件上传漏洞(含批量验证poc)

网神 SecGate 3600 防火墙 app_av_import_save文件上传漏洞(含批量验证poc)

weixin_43567873的博客 298

JPEG文件格式分析及举例验证

数据压缩作业:JPEG文件格式举例分析

不会编程的芝麻张的博客 6208

【我的Android进阶之旅】解决android应用使用android:persistent属性带来的系统Launcher应用必须重启设备才生效的问题,大幅度提升开发效率

一、问题描述 我们在开发系统级别应用,比如Launcher桌面的时候,会发现有个问题:每次Launcher修改完代码,重新编译之后,安装到android设备上之后,必须重启才会生效。否则就是使用了之前的Launcher版本的内容。而每次重启设备得一分钟左右,太慢了,太影响效率了! 1.1 痛点 每次更新完代码,重新安装之后,必须重启设备才会生效。效率太TM低了! 二、分析问题 经过一轮代码排查,最终发现是因为src\main\AndroidManifest.xml文件中,定义application使用了an

字节卷动 1713

JPEG文件格式 JFIF & Exif

JPEG是Joint Photographic Experts Group 的缩写,正是这个专家组制定了JPEG标准以及其他静态图片编解码标准。Joint(联合)是指ISO TC97 WG8(计算机与信息处理技术委员会 第8工作组)和CCITT SGVIII两个工作组的联合. 这个专家组在1992年颁布了第一个JPEG标准, ITU在1992年命名为ITU-T Recommendation T.8

kickxxx的专栏 3万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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

互联网上广泛使用的image/jpeg 图片,准确来说,全称应该叫做使用 JPEG标准压缩图像,使用JFIF标准封装图像数据的图形文件。 JPEG 是一个压缩标准,JFIF 是一个文件格式标准,总体来说它们不是一个概念。本文介绍了JFIF文件格式。

shelldon的专栏 2万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

JPEG的文件格式

JPEG的文件格式 JPEG文件大体上可以分成以下两个部分:标记码(Tag)加压缩数据。先介绍标记码部分。 标记码部分给出了JPEG图象的所有信息(有点类似于BMP中的头信息,但要复杂的多),如图象的宽、高、Huffman表、量化表等等。标记码有很多,但绝大多数的JPEG文件只包含几种。标记码的结构为: SOI DQT              DRI                 

哥弟思 2927

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

JPEG文件格式初探

总结关于JPEG文件格式方面的内容。

阿根的专栏 319

Jpeg文件格式转换成bmp文件格式

Jpeg文件格式转换成bmp文件格式 为了简单,我将jpg图片原文件和转换后的bmp文件都直接存到内存的数组,这样不会涉及文件操作。 将jpg文件转换成数组,并将数组存到文件中方便编译调用,我用的是C库文件操作接口,也可以用其他文件系统。 //读文件 int FILE_Read(FILE*fd, const void*buf, int len) { #defi

一个码农的足迹 1421

jpeg文件格式解析

在某平台上,我们需要利用libexif库,根据设置的属性生成一个新的exif信息,并替换jpeg中原有的exif信息。xxd命令可以将一个jpeg文件转换成可以用文本文档直接打开的16进制数据格式。用这个命令,可以在同级目录下生成一个out.txt文件。打开out.txt。但是在拷贝过程中,因为不熟悉jpeg文件格式,导致拷贝之后文件无法打开。为了解决这个问题,结合网上资料,整理了一下jpeg文件的数据排布。JPEG系列二 JPEG文件中的EXIF(上)JPEG系列二 JPEG文件中的EXIF(下)

sxl9266的博客 306

BMP、JPEG文件格式详解

文章目录六、BMP文件格式详解1、BMP文件格式2、BMP文件头3、位图信息头4、调色板5、位图数据6、对齐规则七、JPEG文件结构分析1、JPEG2、SOI ( Start of Image )2、APP0(Application 0)3、DQT ( Define Quantization Table )4、SOF0 (Start of Frame)5、DHT ( Define Huffman Table )6、SOS ( Start of Scan )7、EOI ( End of Image ) 六、B

m0_37633745的博客 5793

JPEG文件格式简单分析

微处理机中的存放顺序有正序(big endian)和逆序(little endian)之分。正序存放就是高字节存放在前低字节在后,而逆序存放就是低字节在前高字节在后。例如,十六进制数为A02B,正序存放就是A02B,逆序存放就是2BA0。摩托罗拉(Motorola)公司的微处理器使用正序存放,而英特尔(Inte

浩瀚星空,法力无边;其大无外,其小无内。 2162

JPEG文件格式详解

搜得一个文档是关于JPEG文件格式的。 转载于:https://blog.51cto.com/quxiao/696430

weixin_33836223的博客 126
上一篇: UltraEdit 快捷键操作
下一篇: c语言运算符的优先级
Coding人生
博客等级 码龄20年 37粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值