zoukankan      html  css  js  c++  java
  • Exif格式分析


    JPEG

    格式

        0xFFD8:    SOI(start of image)

        0xFF**:    JPEG信息数据段(Exif信息的位置

        SOS:Start of stream

        0xFFD9:    EOI(end of image)

        0xFFEO-0xFFEF:    应用程序标志,用在用户的应用程序中,在解码JPEG格式的图片时不是必须的。

        JPEG格式采用mototota字节顺序,其中的Exif部分却可以采用这两种方式


    JFIF (JPEG档案交换格式)

        0xFFE0:(APP0)相机的配置数据和缩略图标志


    Exif    (Exchangeable Image File 使用TIFF格式来存储数据)

    格式

        FFD8:SIO

        FFE1:APP1 MARKER

        APP1 SIZE

        APP1 DATA

        Other Marker:    ...

        ...

        0xFFE1(APP1):插入数据的应用程序标志

        该格式包含缩略图信息


    TIFF

    格式

        TIFF头(TIFF格式的前8个字节)

            1-2:决定采用何种字节顺序,0x4949(ll)代表intel小端字节顺序,0X4d4d(MM)代表motorola大端字节顺序

            3-4:0x2A,0x00或者0x00,0x2A

            5-8:第一个IFD偏移量(一般是:0x00000008)

        第一个IFD(IF0):

            1-2:这个IFD包含的目录实体数量

            3-...:实体

                3-14:第一个目录实体12个字节

                    3-4:标签号2个字节

                    5-6:数据格式2个字节【数据格式表 1-0】

                    7-10:组成元素的数量4个字节【计算总长度 1-1】

                    11-14:数据本身或者数据的偏移量

                15-26:第二个目录实体12个字节  

                 ...            

            

        下一个IFD的偏移量:4个字节大小

        第二个IFD:

        ...

        0x00000000:这个偏移量出现了...

        最后一个IFD

    案例一:一些数码相机使用IFD数据格式来表示制造商数据【1-1】

    0000:49 49 2A 00 08 00 00 00-02 00 1A 01 05 00 01 00

    0010:00 00 26  00 00 00 69 87-04 00 01  00 00 00 11 02

    0020:00 00 40  00 00 00 48 00-00 00 01  00 00 00 

    解读:

    49 49:    采用intel的小端字节顺序(大多数数码相机采用这种方式)                                                                         0x0000-0x0001    

    2A 00:    因为前一个字节是49 49,这个字段是必选项                                                                                                  0x0002-0x0003

    08 00 00 00:    第一个IFD(图像文件目录)的起始地址(这个地址对应下一个字节)                                                 0x0004-0x0007 

    02 00:    IFD0有两个字节                                                                                                                                                    0x0008-0x0009 

    1A 01:    标签-水平分辨率标签                                                                                                                                          0x000a-0x000b 

    05 00:    格式-无符号分数(每个占8个字节)                                                                                                                 0x000c-0x000d 

    01 00 00 00:    组成元素的数量:1.由于采用intel方式,所有想要读出16进制的数字需要按照 4 3 2 1的字节        0x000e-0x0011 

                            顺序重新排列得  到 0x00000001    ,数据中长度大于4个字节,因此后面4个字节为偏移量           

    26  00 00 00:    偏移量-重新排列得到0x00000026,这个是水平分辨率的首地址                                                        0x0012-0x0015 

    69 87:    标签-EXIF偏移                                                                                                                                                      0x0016-0x0017 

    04 00:    0x0004 ,表示 数据格式-无符号长整型(四个字节)                                                                                        0x0018-0x0019 

    01 00 00 00:    组成元素数量-1                                                                                                                                           0x001a-0x001d 

    11 02 00 00:    Exif SubIFD偏移量实际值(0x00000211 表示 Exif SubIFD首地址)                                                   0x001e-0x0021 

    40  00 00 00:    下一个IFD从0x00000040开始                                                                                                                   0x0022-0x0025 

    48 00-00 00:    水平分辨率分子0x00000048,即72                                                                                                             0x0026-0x0029 

    01  00 00 00:     水平分辨率分母0x00000001,即1,因此水平分辨率为72/1                                                                  0x002a-0x002d 


     缩略图

    JPEG缩略图(Exif2.1规范推荐格式)

         IFD1

            0x0103:6     压缩标签

            0x0201:    偏移量标签

            0x0202:    大小标签

           注: IFD1中可以观察到缩略图的偏移量标签(JpegIFOffset 0x0201)及 大小标签(JpegIFByteCount 0x0202),为普通的JPEG 格式

    TIFF格式

    第一种情况:

        IFD1

            0x0103:1    压缩标签(非压缩采用TIFF格式)

            0x0111:    StripOffset标签   起点数据

            0x0117:    StripByteCount标签 缩略图大小

    第二种情况:

        IFD1

            0x0103:1    压缩标签(非压缩采用RGB格式)

            0x0106:   2

            0x0111:    StripOffset标签   起点数据

            0x0117:    StripByteCount标签 缩略图大小

    第三种情况:

           IFD1

            0x0103:2    压缩标签(压缩采用YcbCr格式)

            0x0106:   2

            0x0111:    StripOffset标签   起点数据

            0x0117:    StripByteCount标签 缩略图大小


  • 相关阅读:
    AutoCompleteTextView控件的使用
    menu菜单
    fragment之间的通信
    fragment的生命周期
    用模型取代字典的好处
    使用fragment兼容低版本的写法
    模拟微信主界面
    动态替换fragment
    fragment入门
    Spring MVC学习总结(1)——Spring MVC单元测试
  • 原文地址:https://www.cnblogs.com/eli01/p/3559893.html
Copyright © 2011-2022 走看看