ImageGear for C and C++ on Windows v21.0 - Updated
User Guide / File Formats and Compressions / File Formats / Metadata Structures / JPEG Metadata Structure
In This Topic
    JPEG Metadata Structure
    In This Topic

    JPEG Level

    Name Id Type Value Type Value Value Length Read Only
    "JPEG-JFIF" IG_FORMAT_JPG LEVEL_START 0 NULL 0 TRUE
    JPEG marker segment levels
    "JPEG-JFIF" IG_FORMAT_JPG LEVEL_END 0 NULL 0 TRUE

    All items between items with Name "JPEG-JFIF" and Id IG_FORMAT_JPG (Type LEVEL_START and LEVEL_END) are interpreted as JPEG metadata. If during sending data from application level to filter level the first item is omitted the data will not be parsed and saved.

    JPEG Marker Segment Levels

    The following JPEG marker segments metadata are supported:

    Frame Marker Segment Level

    Name Id Type Value Type Value Value Length Read Only
    <Frame marker name> <Frame marker Id> LEVEL_START 0 NULL 0 TRUE
    <Frame marker size tag name> <Frame marker size tag Id> VALUE_ITEM UINT16   1 TRUE
    "Precision" 212 VALUE_ITEM UINT8   1 TRUE
    "Lines" 213 VALUE_ITEM UINT16   1 TRUE
    "SamplesPerLine" 214 VALUE_ITEM UINT16   1 TRUE
    "ComponentNumber" 215 VALUE_ITEM UINT8 <n> 1 TRUE
    Frame component level 1
     
    Frame component level <n>
    <Frame marker name> <Frame marker Id> LEVEL_END 0 NULL 0 TRUE

    <Frame marker Id>, <Frame marker name>, <Frame marker size tag name> and <Frame marker size tag Id> are described in the table below:

    Frame Marker <Frame marker name> <Frame marker Id> <Frame marker size tag name> <Frame marker size tag Id>
    SOF0 "SOF0" 0xFFC0 "SOF0_DATASIZE" 60192
    SOF1 "SOF1" 0xFFC1 "SOF1_DATASIZE" 60193
    SOF2 "SOF2" 0xFFC2 "SOF2_DATASIZE" 60194
    SOF3 "SOF3" 0xFFC3 "SOF3_DATASIZE" 60195

    Frame Component Level

    Name Id Type Value Type Value Value Length Read Only
    "Component" <Component No.> LEVEL_START 0 NULL 0 TRUE
    "Id" <Component No.> VALUE_ITEM UINT   1 TRUE
    "MCU_HV" <Component No.> VALUE_ITEM UINT   1 TRUE
    "QuantizationNumber" <Component No.> VALUE_ITEM UINT   1 TRUE
    "Component" <Component No.> LEVEL_END 0 NULL 0 TRUE
    <Component No.> is frame component identifier of appropriate component.

    Scan Marker Segment Level

    Name Id Type Value Type Value Value Length Read Only
    "SOS" 0xFFDA LEVEL_START 0 NULL 0 TRUE
    "SOS_DATASIZE" 60218 VALUE_ITEM UINT16   1 TRUE
    "ComponentNumber" 228 VALUE_ITEM UINT8 <n> 1 TRUE
    Scan component level 1
     
    Scan component level <n>
    "SpectralStart" 235 VALUE_ITEM UINT8   1 TRUE
    "SpectralEnd" 236 VALUE_ITEM UINT8     TRUE
    "AH_AL" 237 VALUE_ITEM UINT8     TRUE
    "SOS" 0xFFDA LEVEL_START 0 NULL 0 TRUE

    Scan Component Level

    Name Id Type Value Type Value Value Length Read Only
    "Component" <Component No.> LEVEL_START 0 NULL 0 TRUE
    "Selector" <Component No.> VALUE_ITEM UINT8   1 TRUE
    "DC_AC" <Component No.> VALUE_ITEM UINT8   1 TRUE
    "Component" <Component No.> LEVEL_END 0 NULL 0 TRUE
    <Component No.> is scan component selector of appropriate component.

    Define-Quantization-Table Marker Segment Level

    Name Id Type Value Type Value Value Length Read Only
    "DQT" 0xFFDB LEVEL_START 0 NULL 0 TRUE
    "DQT_DATASIZE" 60219 VALUE_ITEM UINT16   1 TRUE
    "QuantizationTable" <table 1 Id> VALUE_ITEM UINT8 or UINT16   64 TRUE
     
    "QuantizationTable" <table 1 Id> VALUE_ITEM UINT8 or UINT16   64 TRUE
    "DQT" 0xFFDB LEVEL_END 0 NULL 0 TRUE
    <table Id> is the appropriate quantization table identifier.

    Define-Huffman-Tables Marker Segment Level

    Name Id Type Value Type Value Value Length Read Only
    "DHT" 0xFFC4 LEVEL_START 0 NULL 0 TRUE
    "DHT_DATASIZE" 60196 VALUE_ITEM UINT16   1 TRUE
    "DATA" 0xFFC4 VALUE_ITEM RAW_DATA   <ValueSize> TRUE
    "DHT" 0xFFC4 LEVEL_END 0 NULL 0 TRUE

    Comment Marker Segment Level

    Name Id Type Value Type Value Value Length Read Only
    "COM" 0xFFFE LEVEL_START 0 NULL 0 TRUE
    "COM_DATASIZE" 60254 VALUE_ITEM UINT16   1 TRUE
    "Comment" 0xFFFE VALUE_ITEM STRING   <ValueSize> TRUE
    "COM" 0xFFFE LEVEL_END 0 NULL 0 TRUE

    Application Marker Segment Level

    There are several application marker segments, which data structure is well known. These segments are parsed and their data are passed in special format.

    These marker segments are:

    JFIF APP0 Segment

    Name Id Type Value Type Value Value Length Read Only
    "APP0" 0xFFE0 LEVEL_START 0 NULL 0 TRUE
    "APP0_DATASIZE" 60224 VALUE_ITEM UINT16   1 FALSE
    "JFIF_HEADER" 200 VALUE_ITEM STRING JFIF 5 TRUE
    "Version" 201 VALUE_ITEM UINT16   1 FALSE
    "ResolutionUnits" 202 VALUE_ITEM UINT8   1 FALSE
    "ResolutionX" 203 VALUE_ITEM UINT16   1 FALSE
    "ResolutionY" 204 VALUE_ITEM UINT16   1 FALSE
    "ThumbnailWidth"1 205 VALUE_ITEM UINT8   1 TRUE
    "ThumbnailHeight"2 206 VALUE_ITEM UINT8   1 TRUE
    "APP0" 0xFFE0 LEVEL_END 0 NULL 0 TRUE

    1The thumbnail width tags are present only if the thumbnail is stored to JFIF segment.

    2The thumbnail height tags are present only if the thumbnail is stored to JFIF segment.

    JFIF Extension (JFXX) APP0 Segment

    Name Id Type Value Type Value Value Length Read Only
    "APP0" 0xFFE0 LEVEL_START 0 NULL 0 TRUE
    "APP0_DATASIZE" 60224 VALUE_ITEM UINT16   1 TRUE
    "JFIF_EX_HEADER" 209 VALUE_ITEM STRING "JFXX" 5 TRUE
    "ExtensionCode" 210 VALUE_ITEM UINT8   1 TRUE
    "APP0" 0xFFE0 LEVEL_END 0 NULL 0 TRUE

    Photoshop Image Resource APP13 Marker Segment

    Name Id Type Value Type Value Value Length Read Only
    "APP13" 0xFFED LEVEL_START 0 NULL 0 TRUE
    "APP13_DATASIZE" 60237 VALUE_ITEM UINT16   1 FALSE
    "PHOTOSHOP_HEADER" 59915 VALUE_ITEM STRING "Photoshop 3.0" 14 FALSE
    Photoshop Image Resource level 1
    ...
    Photoshop Image Resource level n
    "APP13" 0xFFED LEVEL_END 0 NULL 0 TRUE
    For "Photoshop Image Resource" metadata structure see in TIFF non-image data the Photoshop Image Resource metadata structure table.

    Other Application Marker Segment Levels

    Name Id Type Value Type Value Value Length Read Only
    <Marker name> <Marker Id> LEVEL_START 0 NULL 0 TRUE
    <Marker size tag name> <Marker size tag Id> VALUE_ITEM UINT16   1 FALSE
    "DATA" <Marker Id> VALUE_ITEM RAW_DATA   <ValueSize> FALSE
    <Marker name> <Marker Id> LEVEL_END 0 NULL 0 TRUE

    <Marker Id>, <Marker name>, <Marker size tag name> and <Marker size tag Id> are in table below:

    Marker <Marker name> <Marker Id> <Marker size tag name> <Marker size tag Id>
    APP0 "APP0" 0xFFE0 "APP0_DATASIZE" 60224
    APP1 "APP1" 0xFFE1 "APP1_DATASIZE" 60225
    APP2 "APP2" 0xFFE2 "APP2_DATASIZE" 60226
    APP3 "APP3" 0xFFE3 "APP3_DATASIZE" 60227
    APP4 "APP4" 0xFFE4 "APP4_DATASIZE" 60228
    APP5 "APP5" 0xFFE5 "APP5_DATASIZE" 60229
    APP6 "APP6" 0xFFE6 "APP6_DATASIZE" 60230
    APP7 "APP7" 0xFFE7 "APP7_DATASIZE" 60231
    APP8 "APP8" 0xFFE8 "APP8_DATASIZE" 60232
    APP9 "APP9" 0xFFE9 "APP9_DATASIZE" 60233
    APP10 "APP10" 0xFFEA "APP10_DATASIZE" 60234
    APP11 "APP11" 0xFFEB "APP11_DATASIZE" 60235
    APP12 "APP12" 0xFFEC "APP12_DATASIZE" 60236
    APP13 "APP13" 0xFFED "APP13_DATASIZE" 60237
    APP14 "APP14" 0xFFEE "APP14_DATASIZE" 60238
    APP15 "APP15" 0xFFEF "APP15_DATASIZE" 60239

    Callback Required for Writing JPEG Metadata Items

    All JPEG metadata items can be written using LPAFT_IG_METAD_ITEM_ADD_CB callback only.

    JPEG Metadata Item Name and ID Constants

    Please see enumIGJPGTagIDs for a complete list of JPEG Metadata Id constants.