宝峰科技

 找回密码
 注册

QQ登录

只需一步,快速开始

智能终端设备维修查询系统注册会员邮箱认证须知!
查看: 5741|回复: 0

[元素素材] JPEG图片格式 结构

[复制链接]
  • TA的每日心情
    开心
    2024-12-9 18:45
  • 签到天数: 124 天

    [LV.7]常住居民III

    admin 发表于 2009-12-12 00:10:30 | 显示全部楼层 |阅读模式

    欢迎您注册加入!这里有您将更精采!

    您需要 登录 才可以下载或查看,没有账号?注册

    x
    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文件交换格式。
    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.299 R + 0.587 G  + 0.114 B
         Cb = - 0.1687R - 0.3313G  + 0.5   B + 128
        Cr = 0.5 R - 0.4187G - 0.0813 B + 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文件中的第一个图像样本是图像左上角的样本。
    文件结构
    文件结构
    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.299 R + 0.587 G  + 0.114 B
         Cb = - 0.1687R - 0.3313G  + 0.5   B + 128
        Cr = 0.5 R - 0.4187G - 0.0813 B + 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文件中的第一个图像样本是图像左上角的样本。
    文件结构
    文件结构
    JFIF文件格式直接使用JPEG标准为应用程序定义的许多标记,因此JFIF格式成了事实上JPEG文件交换格式标准。JPEG的每个标记都是由2个字节组成,其前一个字节是固定值0xFF。每个标记之前还可以添加数目不限的0xFF填充字节(fill byte)。下面是其中的8个标记:
    1. SOI  0xD8            图像开始
    2. APP0 0xE0            JFIF应用数据块
    3. APPn 0xE1 - 0xEF    其他的应用数据块(n, 1~15)
    4. DQT  0xDB           量化表
    5. SOF0 0xC0            帧开始
    6. DHT  0xC4           霍夫曼(Huffman)表
    7. SOS  0xDA           扫描线开始
    8. EOI  0xD9            图像结束
    为使读者对JPEG定义的标记一目了然,现将JPEG的标记码列于表6-05,并保留英文解释。
    表6-05 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)
    o ID
    o 垂直方向的样本因子(vertical sample factor)
    o 水平方向的样本因子(horizontal sample factor)
    o 量化表号(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)
    ③ 每个颜色分量
    o ID
    o 交流系数表号(AC table #)
    o 直流系数表号(DC table #)
    ④ 压缩图像数据(compressed image data)
    (8) 图像结束EOI(End of Image)
    表6-06表示了APP0域的详细结构。有兴趣的读者可通过UltraEdit或者PC TOOLS等工具软件打开一个JPG图像文件,对APP0的结构进行分析和验证。
    表6-06 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 图像文件结束标记

    http://blog.gxceo.com/old/archives/200610/126.html
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    免责声明

    本站中所有被研究的素材与信息全部来源于互联网,版权争议与本站无关。本站所发布的任何软件编程开发或软件的逆向分析文章、逆向分析视频、补丁、注册机和注册信息,仅限用于学习和研究软件安全的目的。全体用户必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。学习编程开发技术或逆向分析技术是为了更好的完善软件可能存在的不安全因素,提升软件安全意识。所以您如果喜欢某程序,请购买注册正版软件,获得正版优质服务!不得将上述内容私自传播、销售或者用于商业用途!否则,一切后果请用户自负!

    QQ|Archiver|手机版|小黑屋|联系我们|宝峰科技 ( 滇公网安备 53050202000040号 | 滇ICP备09007156号-2 )

    Copyright © 2001-2023 Discuz! Team. GMT+8, 2025-5-7 22:06 , File On Powered by Discuz! X3.49

    快速回复 返回顶部 返回列表