JPEG metadata structure is framed in several levels:
- JPEG Level - contains all JPEG metadata
- JPEG Marker Segment Levels - contains metadata of each particular JPEG marker segment
JPEG Level
Name |
Id |
Type |
Value Type |
Value |
Value Length |
Ignored on save |
"JPEG-JFIF" |
ImGearFormats.JPG |
Tree |
|
|
|
|
JPEG marker segment levels |
JPEG Marker Segment Levels
The following JPEG marker segments metadata are supported:
- Frame marker segment level - SOF0, SOF1, SOF2 and SOF3 (read only)
- Frame component level
- Scan marker segment level - SOS (read only)
- Scan component level
- Define-quantization-table marker segment level - DQT (read only)
- Define-quantization-table level
- Define-Huffman-tables marker segment level - DHT (read only)
- Define-Huffman-table level
- Comment marker segment level - COM (read/write)
- Application marker segment level - APP0-APP15 (read/write)
Segment level markers are described in the tables:
Frame Marker Segment Level
Name |
Id |
Type |
Value Type |
Value |
Value Length |
Ignored on save |
"Precision" |
ImGearJPEGTagIDs. FRAME_PRECISION |
Leaf |
UINT8 |
|
1 |
TRUE |
"Lines" |
ImGearJPEGTagIDs. FRAME_LINES |
Leaf |
UINT16 |
|
1 |
TRUE |
"SamplesPerLine" |
ImGearJPEGTagIDs. FRAME_SAMPLES_PER_LINE |
Leaf |
UINT16 |
|
1 |
TRUE |
"NumberOfComponents" |
ImGearJPEGTagIDs. FRAME_NUMBER_OF_COMPONENTS |
Leaf |
UINT8 |
<n> |
1 |
TRUE |
Frame component level 1 |
ImGearJPEGTagIDs. FRAME_COMPONENT_SPEC |
Tree |
|
|
|
|
... |
Frame component level <n> |
ImGearJPEGTagIDs. FRAME_COMPONENT_SPEC |
Tree |
|
|
|
|
Frame Component Level
Name |
Id |
Type |
Value Type |
Value |
Value Length |
Ignored on save |
"Identifier" |
ImGearJPEGTagIDs. FRAME_COMPONENT_ID |
Leaf |
UINT |
<Component No.> |
1 |
TRUE |
HVSamplingFactors |
ImGearJPEGTagIDs. FRAME_COMPONENT_HV_SAMPLING |
Leaf |
UINT |
|
1 |
TRUE |
"QuantizationNumber" |
ImGearJPEGTagIDs. FRAME_COMPONENT_QUANT_SELECTOR |
Leaf |
UINT |
|
1 |
TRUE |
|
<Component No.> is frame component identifier of appropriate component. |
Scan Marker Segment Level
Name |
Id |
Type |
Value Type |
Value |
Value Length |
Ignored on save |
"ComponentNumber" |
ImGearJPEGTagIDs. SCAN_COMPONENT_NUMBER |
Leaf |
UINT8 |
<n> |
1 |
TRUE |
Scan component level 1 |
ImGearJPEGTagIDs.SCAN_COMPONENT |
Tree |
|
|
|
|
|
Scan component level <n> |
ImGearJPEGTagIDs.SCAN_COMPONENT |
Tree |
|
|
|
|
"SpectralStart" |
ImGearJPEGTagIDs.SCAN_SP_START |
Leaf |
UINT8 |
|
1 |
TRUE |
"SpectralEnd" |
ImGearJPEGTagIDs.SCAN_SP_END |
Leaf |
UINT8 |
|
|
TRUE |
"AH_AL" |
ImGearJPEGTagIDs.SCAN_AH_AL |
Leaf |
UINT8 |
|
|
TRUE |
Scan Component Level
Name |
Id |
Type |
Value Type |
Value |
Value Length |
Ignored on save |
"Selector" |
ImGearJPEGTagIDs. SCAN_SELECTOR |
Leaf |
UINT8 |
|
1 |
TRUE |
"DC_AC" |
ImGearJPEGTagIDs. SCAN_DC_AC |
Leaf |
UINT8 |
|
1 |
TRUE |
Define-Quantization-Table Marker Segment Level
Name |
Id |
Type |
Value Type |
Value |
Value Length |
Ignored on save |
"QuantizationTable" |
ImGearJPEGTagIDs.QUANT_TABLE |
Tree |
|
|
|
|
|
"QuantizationTable" |
ImGearJPEGTagIDs.QUANT_TABLE |
Tree |
|
|
|
|
Define-Quantization-Table Table Level
Name |
Id |
Type |
Value Type |
Value |
Value Length |
Ignored on save |
"Descriptor" |
ImGearJPEGTagIDs. QUANT_TABLE_DESCRIPTOR |
Leaf |
UINT8 |
|
|
TRUE |
"Elements" |
ImGearJPEGTagIDs. QUANT_TABLE_ELEMENTS |
Leaf |
UINT8 or UINT16 |
|
|
TRUE |
Define-Huffman-Tables Marker Segment Level
Name |
Id |
Type |
Value Type |
Value |
Value Length |
Ignored on save |
"HuffmanTable" |
ImGearJPEGTagIDs.HUFFMAN_TABLE |
Tree |
|
|
|
|
|
"HuffmanTable" |
ImGearJPEGTagIDs.HUFFMAN_TABLE |
Tree |
|
|
|
|
Define-Huffman-Table Table Level
Name |
Id |
Type |
Value Type |
Value |
Value Length |
Ignored on save |
"Descriptor" |
ImGearJPEGTagIDs. HUFFMAN_TABLE_DESCRIPTOR |
Leaf |
UINT8 |
|
|
TRUE |
"Lengths" |
ImGearJPEGTagIDs. HUFFMAN_TABLE_LENGTH |
Leaf |
UINT8 |
|
|
TRUE |
"Values" |
ImGearJPEGTagIDs. HUFFMAN_TABLE_VALUES |
Leaf |
UINT8 |
|
|
TRUE |
|
"Values" |
ImGearJPEGTagIDs. HUFFMAN_TABLE_VALUES |
Leaf |
UINT8 |
|
|
TRUE |
Comment Marker Segment Level
Name |
Id |
Type |
Value Type |
Value |
Value Length |
Ignored on save |
"Comment" |
ImGearJPEGTagIDs. COMMENT |
Leaf |
STRING |
|
<ValueSize> |
FALSE |
Application Marker Segment Level
There are several application marker segments whose data structure is well known. These segments are parsed and their data are passed in special format.
These marker segments are:
- JFIF APP0 segment
- JFIF extension (JFXX) APP0 segment (read only)
- EXIF APP1 segment
- Photoshop Image Resource APP13 marker segment - includes some IPTC data and another Photoshop Image Resource metadata structure
- Other application marker segment levels
JFIF APP0 Segment
Name |
Id |
Type |
Value Type |
Value |
Value Length |
Ignored on save |
"JFIF_HEADER" |
ImGearJPEGTagIDs. JFIF_ID |
Leaf |
STRING |
JFIF |
5 |
TRUE |
"Version" |
ImGearJPEGTagIDs. JFIF_VERSION |
Leaf |
UINT16 |
|
1 |
FALSE |
"ResolutionUnits" |
ImGearJPEGTagIDs. JFIF_UNITS |
Leaf |
UINT8 |
|
1 |
FALSE |
"ResolutionX" |
ImGearJPEGTagIDs. JFIF_X_RES |
Leaf |
UINT16 |
|
1 |
FALSE |
"ResolutionY" |
ImGearJPEGTagIDs. JFIF_Y_RES |
Leaf |
UINT16 |
|
1 |
FALSE |
"ThumbnailWidth"18 |
ImGearJPEGTagIDs. JFIF_THUMB_WIDTH |
Leaf |
UINT8 |
|
1 |
TRUE |
"ThumbnailHeight"19 |
ImGearJPEGTagIDs. JFIF_THUMB_HEIGHT |
Leaf |
UINT8 |
|
1 |
TRUE |
Photoshop Image Resource APP13 Marker Segment
Name |
Id |
Type |
Value Type |
Value |
Value Length |
Ignored on save |
"PHOTOSHOP_HEADER" |
ImGearJPEGTagIDs. PHOTOSHOP_HEADER |
Leaf |
STRING |
"Photoshop 3.0" |
14 |
FALSE |
Photoshop Image Resource level 1 |
... |
Photoshop Image Resource level n |
Other Application Marker Segment Levels
Name |
Id |
Type |
Value Type |
Value |
Value Length |
Ignored on save |
"DATA" |
ImGearJPEGTagIDs. BINARY_DATA |
Leaf |
RAW_DATA |
|
<ValueSize> |
FALSE |