Project

General

Profile

Actions

The Metadata in TIFF files

The Tagged Image File Format is a container. It's very flexible and can deal with multiple pages, different colour spaces and frame configurations, as well as metadata. The specification is available from: https://partners.adobe.com/public/developer/en/tiff/TIFF6.pdf

The TIFF container is so flexible it is used as the structure for most RAW formats including Adobe's DNG. Additionally the TIFF container is used to store the metadata that lies inside the Exif blocks embedded in JPEG and PNG files.

There is a 64bit version of Tiff called BigTiff. This is currently not supported by exiv2.

The format consists of an 8 byte header which provides a 2 byte endian flag (II or MM), a 2 byte type "magic number" (42) and a 4 byte offset to an Image File Directory.

The IFD (Image File Directory) has a two byte header which contains the length of the directory followed by 12 byte "fields" or "tags". The trailing 4 bytes of the directory is the offset to the next directory or zero to terminate the directory chain.

A tag consists of a 12 byte record: TagID, TagType, Count and Offset which are 2,2,4 and 4 bytes respectively. The TagID defines the purpose of the record (Width, Height, ColorSpace etc) and the TagType defines the data format. Count and Offset are used to contain the raw data or provide an offset in the file at which to read the raw data for this tag.

Example:

The version of exiv2(.exe) which ships with v0.25 provides options -pS to reveals the structure of the TIFF and option -pX is used to extract the raw XMP/xml data.

The option -pv is used to print the metadata values.

$ exiv2 -pv test/data/test.tiff 
0x00fe Image        NewSubfileType              Long        1  0
0x0100 Image        ImageWidth                  Short       1  282
0x0101 Image        ImageLength                 Short       1  212
0x0102 Image        BitsPerSample               Short       3  8 8 8
0x0103 Image        Compression                 Short       1  5
0x0106 Image        PhotometricInterpretation   Short       1  2
0x010e Image        ImageDescription            Ascii      32                                 
0x010f Image        Make                        Ascii       5  SONY
0x0110 Image        Model                       Ascii       9  DSC-S600
0x0111 Image        StripOffsets                Long       16  4372 14864 ...
0x0112 Image        Orientation                 Short       1  1
0x0115 Image        SamplesPerPixel             Short       1  3
0x0116 Image        RowsPerStrip                Long        1  14
0x0117 Image        StripByteCounts             Long       16  10492 ...
0x011a Image        XResolution                 Rational    1  96/1
0x011b Image        YResolution                 Rational    1  96/1
0x011c Image        PlanarConfiguration         Short       1  1
0x0128 Image        ResolutionUnit              Short       1  2
0x0132 Image        DateTime                    Ascii      20  2009:04:26 12:38:18
0x013d Image        Predictor                   Short       1  1
0x0153 Image        SampleFormat                Short       3  1 1 1
0x02bc Image        XMLPacket                   Byte      2505  (Binary value suppressed)
0x8773 Image        InterColorProfile           Undefined 1352  (Binary value suppressed)
$ exiv2 -pS test/data/test.tiff
STRUCTURE OF TIFF FILE (II): test/data/test.tiff
 address |    tag                           |      type |    count |    offset | value
      10 | 0x00fe NewSubfileType            |      LONG |        1 |         0 | 0
      22 | 0x0100 ImageWidth                |     SHORT |        1 |       282 | 282
      34 | 0x0101 ImageLength               |     SHORT |        1 |       212 | 212
      46 | 0x0102 BitsPerSample             |     SHORT |        3 |       290 | 8 8 8
      58 | 0x0103 Compression               |     SHORT |        1 |         5 | 5
      70 | 0x0106 PhotometricInterpretation |     SHORT |        1 |         2 | 2
      82 | 0x010e ImageDescription          |     ASCII |       32 |       296 |                                
      94 | 0x010f Make                      |     ASCII |        5 |       328 | SONY
     106 | 0x0110 Model                     |     ASCII |        9 |       334 | DSC-S600
     118 | 0x0111 StripOffsets              |      LONG |       16 |       344 | 4372 14864 25634 37110 50496 ...
     130 | 0x0112 Orientation               |     SHORT |        1 |         1 | 1
     142 | 0x0115 SamplesPerPixel           |     SHORT |        1 |         3 | 3
     154 | 0x0116 RowsPerStrip              |      LONG |        1 |        14 | 14
     166 | 0x0117 StripByteCounts           |      LONG |       16 |       408 | 10492 10770 11476 13385 13348 ...
     178 | 0x011a XResolution               |  RATIONAL |        1 |       472 | 96/1
     190 | 0x011b YResolution               |  RATIONAL |        1 |       480 | 96/1
     202 | 0x011c PlanarConfiguration       |     SHORT |        1 |         1 | 1
     214 | 0x0128 ResolutionUnit            |     SHORT |        1 |         2 | 2
     226 | 0x0132 DateTime                  |     ASCII |       20 |       488 | 2009:04:26 12:38:18
     238 | 0x013d Predictor                 |     SHORT |        1 |         1 | 1
     250 | 0x0153 SampleFormat              |     SHORT |        3 |       508 | 1 1 1
     262 | 0x02bc XMLPacket                 |      BYTE |     2505 |       514 | <?xpacket begin="..." id="W5M0Mp ...
     274 | 0x8773 InterColorProfile         | UNDEFINED |     1352 |      3020 | ...Happl. ..scnrRGB XYZ ....... ...
END test/data/test.tiff
$ exiv2 -pX test/data/test.tiff  | xmllint --format -
<?xml version="1.0"?>
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0-Exiv2">
  <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <rdf:Description xmlns:dc="http://purl.org/dc/elements/1.1/" rdf:about="">
      <dc:title>
        <rdf:Alt>
          <rdf:li xml:lang="x-default">this is a test image</rdf:li>
        </rdf:Alt>
      </dc:title>
    </rdf:Description>
  </rdf:RDF>
</x:xmpmeta>
<?xpacket end="w"?>
$ 

You can use the output from -pS to determine the location of the XMLPacket:

$ exiv2 -pS test/data/test.tiff | grep XMLPacket 
     262 | 0x02bc XMLPacket                 |      BYTE |     2505 |       514 | <?xpacket begin="..." id="W5M0Mp ...
$ 
You can see the XMLPacket of 2505 bytes stored at offset 514. You can extract the XMP with the following command:
$ dd bs=1 count=2505 skip=514 if=test/data/test.tiff | xmllint --format - 
2505+0 records in
2505+0 records out
2505 bytes (2.5 kB) copied, 0.0064 s, 391 kB/s
<?xml version="1.0"?>
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0-Exiv2">
  <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <rdf:Description xmlns:dc="http://purl.org/dc/elements/1.1/" rdf:about="">
      <dc:title>
        <rdf:Alt>
          <rdf:li xml:lang="x-default">this is a test image</rdf:li>
        </rdf:Alt>
      </dc:title>
    </rdf:Description>
  </rdf:RDF>
</x:xmpmeta>
<?xpacket end="w"?>

The option -pX doesn't use dd to achieve the same result and is much more convenient to use.

To demonstrate that the metadata block in a JPEG is a TIFF file, extract and print the structure.

$ exiv2 -pS test/data/Reagan.jpg 
STRUCTURE OF JPEG FILE: test/data/Reagan.jpg
 address | marker       |  length | data
       0 | 0xffd8 SOI  
       2 | 0xffe1 APP1  |    5718 | Exif..MM.*......................
    5722 | 0xffed APP13 |    3038 | Photoshop 3.0.8BIM..........Z...
    8762 | 0xffe1 APP1  |    5329 | http://ns.adobe.com/xap/1.0/.<?x
   14093 | 0xffe2 APP2  |     576 | ICC_PROFILE......0ADBE....mntrRG chunk 1/1
   14671 | 0xffee APP14 |      14 | Adobe.d@......
   14687 | 0xffdb DQT   |     132 
   14821 | 0xffc0 SOF0  |      17 
   14840 | 0xffdd DRI   |       4 
   14846 | 0xffc4 DHT   |     418 
   15266 | 0xffda SOS  
$ 
We can extract the APP1/Exif data as follows:
$ dd bs=1 skip=$((2+2+8)) count=$((5718-8)) if=test/data/Reagan.jpg of=ReaganExif.tiff
5710+0 records in
5710+0 records out
5710 bytes (5.7 kB) copied, 0.026688 s, 214 kB/s
$ exiv2 -pS ReaganExif.tif 
STRUCTURE OF TIFF FILE (MM): ReaganExif.tif
 address |    tag                           |      type |    count |    offset | value
      10 | 0x0100 ImageWidth                |     SHORT |        1 |  13107200 | 200
      22 | 0x0101 ImageLength               |     SHORT |        1 |   8519680 | 130
      34 | 0x0102 BitsPerSample             |     SHORT |        4 |       242 | 8 8 8 8
      46 | 0x0103 Compression               |     SHORT |        1 |     65536 | 1
      58 | 0x0106 PhotometricInterpretation |     SHORT |        1 |    131072 | 2
      70 | 0x010e ImageDescription          |     ASCII |      403 |       250 | 040621-N-6536T-062.USS Ronald Re ...
      82 | 0x010f Make                      |     ASCII |       18 |       653 | NIKON CORPORATION
      94 | 0x0110 Model                     |     ASCII |       10 |       671 | NIKON D1X
     106 | 0x0112 Orientation               |     SHORT |        1 |     65536 | 1
     118 | 0x0115 SamplesPerPixel           |     SHORT |        1 |    262144 | 4
     130 | 0x011a XResolution               |  RATIONAL |        1 |       681 | 3000000/10000
     142 | 0x011b YResolution               |  RATIONAL |        1 |       689 | 3000000/10000
     154 | 0x011c PlanarConfiguration       |     SHORT |        1 |     65536 | 1
     166 | 0x0128 ResolutionUnit            |     SHORT |        1 |    131072 | 2
     178 | 0x0131 Software                  |     ASCII |       40 |       697 | Adobe Photoshop Elements 12.0 Ma ...
     190 | 0x0132 DateTime                  |     ASCII |       20 |       737 | 2016:09:13 11:58:16
     202 | 0x013b Artist                    |     ASCII |       34 |       757 | Photographer..s Mate 3rd Class ( ...
     214 | 0x8769 ExifTag                   |      LONG |        1 |       792 | 792
     226 | 0x8825 GPSTag                    |      LONG |        1 |      1400 | 1400
    1422 | 0x0103 Compression               |     SHORT |        1 |    393216 | 6
    1434 | 0x011a XResolution               |  RATIONAL |        1 |      1498 | 72/1
    1446 | 0x011b YResolution               |  RATIONAL |        1 |      1506 | 72/1
    1458 | 0x0128 ResolutionUnit            |     SHORT |        1 |    131072 | 2
    1470 | 0x0201 JPEGInterchangeFormat     |      LONG |        1 |      1514 | 1514
    1482 | 0x0202 JPEGInterchangeFormatLeng |      LONG |        1 |      4196 | 4196
END ReaganExif.tif
$ 
The version of the exiv2 utility that ships with v0.26 later has an option -pR which Recursively prints the structure of an image file. Recursively means the utility prints structures embedded within other structures. For example, the Exif metadata in a JPEG is encoded as a TIFF embedded in the APP1/Exif segment of the JPEG.
$ exiv2 -pR test/data/Reagan.jpg 
STRUCTURE OF JPEG FILE: test/data/Reagan.jpg
 address | marker       |  length | data
       0 | 0xffd8 SOI  
       2 | 0xffe1 APP1  |    5718 | Exif..MM.*......................
  STRUCTURE OF TIFF FILE (MM): MemIo
   address |    tag                           |      type |    count |    offset | value
        10 | 0x0100 ImageWidth                |     SHORT |        1 |  13107200 | 200
        22 | 0x0101 ImageLength               |     SHORT |        1 |   8519680 | 130
        34 | 0x0102 BitsPerSample             |     SHORT |        4 |       242 | 8 8 8 8
        46 | 0x0103 Compression               |     SHORT |        1 |     65536 | 1
        58 | 0x0106 PhotometricInterpretation |     SHORT |        1 |    131072 | 2
        70 | 0x010e ImageDescription          |     ASCII |      403 |       250 | 040621-N-6536T-062.USS Ronald Re ...
        82 | 0x010f Make                      |     ASCII |       18 |       653 | NIKON CORPORATION
        94 | 0x0110 Model                     |     ASCII |       10 |       671 | NIKON D1X
       106 | 0x0112 Orientation               |     SHORT |        1 |     65536 | 1
       118 | 0x0115 SamplesPerPixel           |     SHORT |        1 |    262144 | 4
       130 | 0x011a XResolution               |  RATIONAL |        1 |       681 | 681/0
       142 | 0x011b YResolution               |  RATIONAL |        1 |       689 | 689/0
       154 | 0x011c PlanarConfiguration       |     SHORT |        1 |     65536 | 1
       166 | 0x0128 ResolutionUnit            |     SHORT |        1 |    131072 | 2
       178 | 0x0131 Software                  |     ASCII |       40 |       697 | Adobe Photoshop Elements 12.0 Ma ...
       190 | 0x0132 DateTime                  |     ASCII |       20 |       737 | 2016:09:13 11:58:16
       202 | 0x013b Artist                    |     ASCII |       34 |       757 | Photographer..s Mate 3rd Class ( ...
       214 | 0x8769 ExifTag                   |      LONG |        1 |       792 | 792
    STRUCTURE OF TIFF FILE (MM): MemIo
     address |    tag                           |      type |    count |    offset | value
         794 | 0x829a ExposureTime              |  RATIONAL |        1 |      1254 | 1254/0
         806 | 0x829d FNumber                   |  RATIONAL |        1 |      1262 | 1262/0
         818 | 0x8822 ExposureProgram           |     SHORT |        1 |     65536 | 1
         830 | 0x9000 ExifVersion               | UNDEFINED |        4 | 808596016 | 0220
         842 | 0x9003 DateTimeOriginal          |     ASCII |       20 |      1270 | 2004:06:21 23:37:53
         854 | 0x9004 DateTimeDigitized         |     ASCII |       20 |      1290 | 2004:06:21 23:37:53
         866 | 0x9101 ComponentsConfiguration   | UNDEFINED |        4 |  16909056 | ...
         878 | 0x9102 CompressedBitsPerPixel    |  RATIONAL |        1 |      1310 | 1310/0
         890 | 0x9201 ShutterSpeedValue         | SRATIONAL |        1 |      1318 | 1318/0
         902 | 0x9202 ApertureValue             |  RATIONAL |        1 |      1326 | 1326/0
         914 | 0x9204 ExposureBiasValue         | SRATIONAL |        1 |      1334 | 1334/0
         926 | 0x9205 MaxApertureValue          |  RATIONAL |        1 |      1342 | 1342/0
         938 | 0x9207 MeteringMode              |     SHORT |        1 |    131072 | 2
         950 | 0x9208 LightSource               |     SHORT |        1 |    655360 | 10
         962 | 0x9209 Flash                     |     SHORT |        1 |         0 | 0
         974 | 0x920a FocalLength               |  RATIONAL |        1 |      1350 | 1350/0
         986 | 0x9290 SubSecTime                |     ASCII |        3 | 808845312 | 06
         998 | 0x9291 SubSecTimeOriginal        |     ASCII |        3 | 808845312 | 06
        1010 | 0x9292 SubSecTimeDigitized       |     ASCII |        3 | 808845312 | 06
        1022 | 0xa000 FlashpixVersion           | UNDEFINED |        4 | 808529968 | 0100
        1034 | 0xa001 ColorSpace                |     SHORT |        1 |4294901760 | 65535
        1046 | 0xa002 PixelXDimension           |      LONG |        1 |       200 | 200
        1058 | 0xa003 PixelYDimension           |      LONG |        1 |       130 | 130
        1070 | 0xa217 SensingMethod             |     SHORT |        1 |    131072 | 2
        1082 | 0xa300 FileSource                | UNDEFINED |        1 |  50331648 | .
        1094 | 0xa301 SceneType                 | UNDEFINED |        1 |  16777216 | .
        1106 | 0xa401 CustomRendered            |     SHORT |        1 |         0 | 0
        1118 | 0xa402 ExposureMode              |     SHORT |        1 |     65536 | 1
        1130 | 0xa403 WhiteBalance              |     SHORT |        1 |     65536 | 1
        1142 | 0xa404 DigitalZoomRatio          |  RATIONAL |        1 |      1358 | 1358/0
        1154 | 0xa405 FocalLengthIn35mmFilm     |     SHORT |        1 |   4128768 | 63
        1166 | 0xa406 SceneCaptureType          |     SHORT |        1 |         0 | 0
        1178 | 0xa407 GainControl               |     SHORT |        1 |         0 | 0
        1190 | 0xa408 Contrast                  |     SHORT |        1 |         0 | 0
        1202 | 0xa409 Saturation                |     SHORT |        1 |         0 | 0
        1214 | 0xa40a Sharpness                 |     SHORT |        1 |         0 | 0
        1226 | 0xa40c SubjectDistanceRange      |     SHORT |        1 |         0 | 0
        1238 | 0xa420 ImageUniqueID             |     ASCII |       33 |      1366 | 127c1377b054a3f65bf2754ebb24e7f2 ...
    END MemIo
       226 | 0x8825 GPSTag                    |      LONG |        1 |      1400 | 1400
      1422 | 0x0103 Compression               |     SHORT |        1 |    393216 | 6
      1434 | 0x011a XResolution               |  RATIONAL |        1 |      1498 | 1498/0
      1446 | 0x011b YResolution               |  RATIONAL |        1 |      1506 | 1506/0
      1458 | 0x0128 ResolutionUnit            |     SHORT |        1 |    131072 | 2
      1470 | 0x0201 JPEGInterchangeFormat     |      LONG |        1 |      1514 | 1514
      1482 | 0x0202 JPEGInterchangeFormatLeng |      LONG |        1 |      4196 | 4196
  END MemIo
    5722 | 0xffed APP13 |    3038 | Photoshop 3.0.8BIM..........Z...
  Record | DataSet | Name                     | Length | Data
       1 |      90 | CharacterSet             |      3 | .%G
       1 |      90 | CharacterSet             |      3 | .%G
       2 |       0 | RecordVersion            |      2 | ..
       2 |     120 | Caption                  |    402 | 040621-N-6536T-062.USS Ronald Reagan (CV...
       2 |     122 | Writer                   |      9 | Dir. NVNS
       2 |      40 | SpecialInstructions      |     49 | Credit as U.S. Navy photo by Elizabeth T...
       2 |      80 | Byline                   |     32 | Photographer..s Mate 3rd Class (
       2 |      85 | BylineTitle              |     21 | U.S Navy Photographer
       2 |     110 | Credit                   |      8 | U.S Navy
       2 |     115 | Source                   |     24 | Navy Visual News Service
       2 |       5 | ObjectName               |     18 | 040621-N-6536T-062
       2 |      55 | DateCreated              |      8 | 20040621
       2 |      60 | TimeCreated              |     11 | 000000+0000
       2 |      62 | DigitizationDate         |      8 | 20040621
       2 |      63 | DigitizationTime         |     11 | 233753-0400
       2 |      90 | City                     |     19 | Straits of Magellan
       2 |     101 | CountryName              |     13 | South America
       2 |      15 | Category                 |      1 | N
       2 |      20 | SuppCategory             |     12 | 703-614-9154
       2 |      20 | SuppCategory             |     23 | navyvisualnews@navy.mil
       2 |      20 | SuppCategory             |     11 | UNCLASSFIED
       2 |      10 | Urgency                  |      1 | 5
       2 |      25 | Keywords                 |     13 | ronald reagan
       2 |      25 | Keywords                 |      6 | reagan
       2 |      25 | Keywords                 |      6 | cvn 76
       2 |      25 | Keywords                 |      6 | cvn-76
       2 |      25 | Keywords                 |     18 | straights magellan
       2 |      25 | Keywords                 |      8 | magellan
       2 |      25 | Keywords                 |      7 | carrier
       2 |      25 | Keywords                 |     12 | nimitz-class
       2 |      25 | Keywords                 |      4 | ship
       2 |      25 | Keywords                 |      8 | underway
    8762 | 0xffe1 APP1  |    5329 | http://ns.adobe.com/xap/1.0/.<?x
   14093 | 0xffe2 APP2  |     576 | ICC_PROFILE......0ADBE....mntrRG chunk 1/1
   14671 | 0xffee APP14 |      14 | Adobe.d@......
   14687 | 0xffdb DQT   |     132 
   14821 | 0xffc0 SOF0  |      17 
   14840 | 0xffdd DRI   |       4 
   14846 | 0xffc4 DHT   |     418 
   15266 | 0xffda SOS  
$ 

Updated by Robin Mills about 5 years ago · 20 revisions