Project

General

Profile

The Metadata in TIFF files » History » Version 20

Robin Mills, 13 Nov 2016 11:14

1 16 Robin Mills
h2{color:#628DB6}. The Metadata in TIFF files
2 1 Robin Mills
3 19 Robin Mills
p{margin-left:60px;}. 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
4 1 Robin Mills
5 16 Robin Mills
p{margin-left:60px;}. 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.
6 14 Robin Mills
7 16 Robin Mills
p{margin-left:60px;}. There is a 64bit version of Tiff called _*BigTiff*_. This is currently not supported by exiv2.
8 14 Robin Mills
9 16 Robin Mills
p{margin-left:60px;}. !Tiff.png!
10 3 Robin Mills
11 16 Robin Mills
p{margin-left:60px;}. 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*_.
12 1 Robin Mills
13 16 Robin Mills
p{margin-left:60px;}. 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.
14 15 Robin Mills
15 16 Robin Mills
p{margin-left:60px;}. 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.
16 7 Robin Mills
17 16 Robin Mills
h2{color:#628DB6}. Example:
18
19 10 Robin Mills
The version of exiv2(.exe) which ships with v0.25 provides options _*<code>-pS</code>*_ to reveals the structure of the TIFF and option _*<code>-pX</code>*_ is used to extract the raw XMP/xml data.
20
21 20 Robin Mills
The option _*<code>-pv</code>*_ is used to print the metadata values.<pre>$ exiv2 -pv test/data/test.tiff 
22
0x00fe Image        NewSubfileType              Long        1  0
23
0x0100 Image        ImageWidth                  Short       1  282
24
0x0101 Image        ImageLength                 Short       1  212
25
0x0102 Image        BitsPerSample               Short       3  8 8 8
26
0x0103 Image        Compression                 Short       1  5
27
0x0106 Image        PhotometricInterpretation   Short       1  2
28
0x010e Image        ImageDescription            Ascii      32                                 
29
0x010f Image        Make                        Ascii       5  SONY
30
0x0110 Image        Model                       Ascii       9  DSC-S600
31
0x0111 Image        StripOffsets                Long       16  4372 14864 ...
32
0x0112 Image        Orientation                 Short       1  1
33
0x0115 Image        SamplesPerPixel             Short       1  3
34
0x0116 Image        RowsPerStrip                Long        1  14
35
0x0117 Image        StripByteCounts             Long       16  10492 ...
36
0x011a Image        XResolution                 Rational    1  96/1
37
0x011b Image        YResolution                 Rational    1  96/1
38
0x011c Image        PlanarConfiguration         Short       1  1
39
0x0128 Image        ResolutionUnit              Short       1  2
40
0x0132 Image        DateTime                    Ascii      20  2009:04:26 12:38:18
41
0x013d Image        Predictor                   Short       1  1
42
0x0153 Image        SampleFormat                Short       3  1 1 1
43
0x02bc Image        XMLPacket                   Byte      2505  (Binary value suppressed)
44
0x8773 Image        InterColorProfile           Undefined 1352  (Binary value suppressed)
45 11 Robin Mills
$ exiv2 -pS test/data/test.tiff
46 10 Robin Mills
STRUCTURE OF TIFF FILE (II): test/data/test.tiff
47
 address |    tag                           |      type |    count |    offset | value
48
      10 | 0x00fe NewSubfileType            |      LONG |        1 |         0 | 0
49
      22 | 0x0100 ImageWidth                |     SHORT |        1 |       282 | 282
50
      34 | 0x0101 ImageLength               |     SHORT |        1 |       212 | 212
51
      46 | 0x0102 BitsPerSample             |     SHORT |        3 |       290 | 8 8 8
52
      58 | 0x0103 Compression               |     SHORT |        1 |         5 | 5
53
      70 | 0x0106 PhotometricInterpretation |     SHORT |        1 |         2 | 2
54
      82 | 0x010e ImageDescription          |     ASCII |       32 |       296 |                                
55
      94 | 0x010f Make                      |     ASCII |        5 |       328 | SONY
56
     106 | 0x0110 Model                     |     ASCII |        9 |       334 | DSC-S600
57
     118 | 0x0111 StripOffsets              |      LONG |       16 |       344 | 4372 14864 25634 37110 50496 ...
58
     130 | 0x0112 Orientation               |     SHORT |        1 |         1 | 1
59
     142 | 0x0115 SamplesPerPixel           |     SHORT |        1 |         3 | 3
60
     154 | 0x0116 RowsPerStrip              |      LONG |        1 |        14 | 14
61
     166 | 0x0117 StripByteCounts           |      LONG |       16 |       408 | 10492 10770 11476 13385 13348 ...
62
     178 | 0x011a XResolution               |  RATIONAL |        1 |       472 | 96/1
63
     190 | 0x011b YResolution               |  RATIONAL |        1 |       480 | 96/1
64
     202 | 0x011c PlanarConfiguration       |     SHORT |        1 |         1 | 1
65
     214 | 0x0128 ResolutionUnit            |     SHORT |        1 |         2 | 2
66
     226 | 0x0132 DateTime                  |     ASCII |       20 |       488 | 2009:04:26 12:38:18
67
     238 | 0x013d Predictor                 |     SHORT |        1 |         1 | 1
68
     250 | 0x0153 SampleFormat              |     SHORT |        3 |       508 | 1 1 1
69
     262 | 0x02bc XMLPacket                 |      BYTE |     2505 |       514 | <?xpacket begin="..." id="W5M0Mp ...
70
     274 | 0x8773 InterColorProfile         | UNDEFINED |     1352 |      3020 | ...Happl. ..scnrRGB XYZ ....... ...
71
END test/data/test.tiff
72
$ exiv2 -pX test/data/test.tiff  | xmllint --format -
73 1 Robin Mills
<?xml version="1.0"?>
74
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
75
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0-Exiv2">
76
  <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
77
    <rdf:Description xmlns:dc="http://purl.org/dc/elements/1.1/" rdf:about="">
78
      <dc:title>
79
        <rdf:Alt>
80 10 Robin Mills
          <rdf:li xml:lang="x-default">this is a test image</rdf:li>
81 1 Robin Mills
        </rdf:Alt>
82
      </dc:title>
83
    </rdf:Description>
84
  </rdf:RDF>
85
</x:xmpmeta>
86
<?xpacket end="w"?>
87 16 Robin Mills
$ </pre>
88
89
You can use the output from _*<code>-pS</code>*_ to determine the location of the XMLPacket:<pre>$ exiv2 -pS test/data/test.tiff | grep XMLPacket 
90 10 Robin Mills
     262 | 0x02bc XMLPacket                 |      BYTE |     2505 |       514 | <?xpacket begin="..." id="W5M0Mp ...
91 18 Robin Mills
$ </pre>You can see the XMLPacket of 2505 bytes stored at offset 514.   You can extract the XMP with the following command:<pre>$ dd bs=1 count=2505 skip=514 if=test/data/test.tiff | xmllint --format - 
92 10 Robin Mills
2505+0 records in
93
2505+0 records out
94 1 Robin Mills
2505 bytes (2.5 kB) copied, 0.0064 s, 391 kB/s
95
<?xml version="1.0"?>
96
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
97 4 Robin Mills
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0-Exiv2">
98 1 Robin Mills
  <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
99
    <rdf:Description xmlns:dc="http://purl.org/dc/elements/1.1/" rdf:about="">
100 2 Robin Mills
      <dc:title>
101
        <rdf:Alt>
102
          <rdf:li xml:lang="x-default">this is a test image</rdf:li>
103 10 Robin Mills
        </rdf:Alt>
104 2 Robin Mills
      </dc:title>
105
    </rdf:Description>
106
  </rdf:RDF>
107
</x:xmpmeta>
108
<?xpacket end="w"?>
109 16 Robin Mills
</pre>
110 13 Robin Mills
111 16 Robin Mills
The option _*<code>-pX</code>*_ doesn't use dd to achieve the same result and is much more convenient to use.
112
113 1 Robin Mills
To demonstrate that the metadata block in a JPEG is a TIFF file, extract and print the structure.<pre>$ exiv2 -pS test/data/Reagan.jpg 
114
STRUCTURE OF JPEG FILE: test/data/Reagan.jpg
115
 address | marker       |  length | data
116 2 Robin Mills
       0 | 0xffd8 SOI  
117
       2 | 0xffe1 APP1  |    5718 | Exif..MM.*......................
118
    5722 | 0xffed APP13 |    3038 | Photoshop 3.0.8BIM..........Z...
119 10 Robin Mills
    8762 | 0xffe1 APP1  |    5329 | http://ns.adobe.com/xap/1.0/.<?x
120
   14093 | 0xffe2 APP2  |     576 | ICC_PROFILE......0ADBE....mntrRG chunk 1/1
121
   14671 | 0xffee APP14 |      14 | Adobe.d@......
122
   14687 | 0xffdb DQT   |     132 
123
   14821 | 0xffc0 SOF0  |      17 
124
   14840 | 0xffdd DRI   |       4 
125
   14846 | 0xffc4 DHT   |     418 
126 16 Robin Mills
   15266 | 0xffda SOS  
127 18 Robin Mills
$ </pre>We can extract the APP1/Exif data as follows:<pre>$ dd bs=1 skip=$((2+2+8)) count=$((5718-8)) if=test/data/Reagan.jpg of=ReaganExif.tiff
128 10 Robin Mills
5710+0 records in
129
5710+0 records out
130
5710 bytes (5.7 kB) copied, 0.026688 s, 214 kB/s
131
$ exiv2 -pS ReaganExif.tif 
132
STRUCTURE OF TIFF FILE (MM): ReaganExif.tif
133
 address |    tag                           |      type |    count |    offset | value
134
      10 | 0x0100 ImageWidth                |     SHORT |        1 |  13107200 | 200
135
      22 | 0x0101 ImageLength               |     SHORT |        1 |   8519680 | 130
136
      34 | 0x0102 BitsPerSample             |     SHORT |        4 |       242 | 8 8 8 8
137
      46 | 0x0103 Compression               |     SHORT |        1 |     65536 | 1
138
      58 | 0x0106 PhotometricInterpretation |     SHORT |        1 |    131072 | 2
139
      70 | 0x010e ImageDescription          |     ASCII |      403 |       250 | 040621-N-6536T-062.USS Ronald Re ...
140
      82 | 0x010f Make                      |     ASCII |       18 |       653 | NIKON CORPORATION
141
      94 | 0x0110 Model                     |     ASCII |       10 |       671 | NIKON D1X
142
     106 | 0x0112 Orientation               |     SHORT |        1 |     65536 | 1
143
     118 | 0x0115 SamplesPerPixel           |     SHORT |        1 |    262144 | 4
144
     130 | 0x011a XResolution               |  RATIONAL |        1 |       681 | 3000000/10000
145 1 Robin Mills
     142 | 0x011b YResolution               |  RATIONAL |        1 |       689 | 3000000/10000
146
     154 | 0x011c PlanarConfiguration       |     SHORT |        1 |     65536 | 1
147
     166 | 0x0128 ResolutionUnit            |     SHORT |        1 |    131072 | 2
148 10 Robin Mills
     178 | 0x0131 Software                  |     ASCII |       40 |       697 | Adobe Photoshop Elements 12.0 Ma ...
149
     190 | 0x0132 DateTime                  |     ASCII |       20 |       737 | 2016:09:13 11:58:16
150
     202 | 0x013b Artist                    |     ASCII |       34 |       757 | Photographer..s Mate 3rd Class ( ...
151
     214 | 0x8769 ExifTag                   |      LONG |        1 |       792 | 792
152
     226 | 0x8825 GPSTag                    |      LONG |        1 |      1400 | 1400
153
    1422 | 0x0103 Compression               |     SHORT |        1 |    393216 | 6
154
    1434 | 0x011a XResolution               |  RATIONAL |        1 |      1498 | 72/1
155
    1446 | 0x011b YResolution               |  RATIONAL |        1 |      1506 | 72/1
156 1 Robin Mills
    1458 | 0x0128 ResolutionUnit            |     SHORT |        1 |    131072 | 2
157 10 Robin Mills
    1470 | 0x0201 JPEGInterchangeFormat     |      LONG |        1 |      1514 | 1514
158 16 Robin Mills
    1482 | 0x0202 JPEGInterchangeFormatLeng |      LONG |        1 |      4196 | 4196
159
END ReaganExif.tif
160 18 Robin Mills
$ </pre>The version of the exiv2 utility that ships with v0.26 later has an option _*<code>-pR</code>*_ 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.<pre>$ exiv2 -pR test/data/Reagan.jpg 
161 10 Robin Mills
STRUCTURE OF JPEG FILE: test/data/Reagan.jpg
162
 address | marker       |  length | data
163
       0 | 0xffd8 SOI  
164 4 Robin Mills
       2 | 0xffe1 APP1  |    5718 | Exif..MM.*......................
165
  STRUCTURE OF TIFF FILE (MM): MemIo
166
   address |    tag                           |      type |    count |    offset | value
167
        10 | 0x0100 ImageWidth                |     SHORT |        1 |  13107200 | 200
168
        22 | 0x0101 ImageLength               |     SHORT |        1 |   8519680 | 130
169
        34 | 0x0102 BitsPerSample             |     SHORT |        4 |       242 | 8 8 8 8
170
        46 | 0x0103 Compression               |     SHORT |        1 |     65536 | 1
171
        58 | 0x0106 PhotometricInterpretation |     SHORT |        1 |    131072 | 2
172
        70 | 0x010e ImageDescription          |     ASCII |      403 |       250 | 040621-N-6536T-062.USS Ronald Re ...
173
        82 | 0x010f Make                      |     ASCII |       18 |       653 | NIKON CORPORATION
174
        94 | 0x0110 Model                     |     ASCII |       10 |       671 | NIKON D1X
175
       106 | 0x0112 Orientation               |     SHORT |        1 |     65536 | 1
176
       118 | 0x0115 SamplesPerPixel           |     SHORT |        1 |    262144 | 4
177
       130 | 0x011a XResolution               |  RATIONAL |        1 |       681 | 681/0
178
       142 | 0x011b YResolution               |  RATIONAL |        1 |       689 | 689/0
179
       154 | 0x011c PlanarConfiguration       |     SHORT |        1 |     65536 | 1
180
       166 | 0x0128 ResolutionUnit            |     SHORT |        1 |    131072 | 2
181
       178 | 0x0131 Software                  |     ASCII |       40 |       697 | Adobe Photoshop Elements 12.0 Ma ...
182
       190 | 0x0132 DateTime                  |     ASCII |       20 |       737 | 2016:09:13 11:58:16
183
       202 | 0x013b Artist                    |     ASCII |       34 |       757 | Photographer..s Mate 3rd Class ( ...
184
       214 | 0x8769 ExifTag                   |      LONG |        1 |       792 | 792
185
    STRUCTURE OF TIFF FILE (MM): MemIo
186
     address |    tag                           |      type |    count |    offset | value
187
         794 | 0x829a ExposureTime              |  RATIONAL |        1 |      1254 | 1254/0
188
         806 | 0x829d FNumber                   |  RATIONAL |        1 |      1262 | 1262/0
189
         818 | 0x8822 ExposureProgram           |     SHORT |        1 |     65536 | 1
190
         830 | 0x9000 ExifVersion               | UNDEFINED |        4 | 808596016 | 0220
191
         842 | 0x9003 DateTimeOriginal          |     ASCII |       20 |      1270 | 2004:06:21 23:37:53
192
         854 | 0x9004 DateTimeDigitized         |     ASCII |       20 |      1290 | 2004:06:21 23:37:53
193
         866 | 0x9101 ComponentsConfiguration   | UNDEFINED |        4 |  16909056 | ...
194
         878 | 0x9102 CompressedBitsPerPixel    |  RATIONAL |        1 |      1310 | 1310/0
195
         890 | 0x9201 ShutterSpeedValue         | SRATIONAL |        1 |      1318 | 1318/0
196
         902 | 0x9202 ApertureValue             |  RATIONAL |        1 |      1326 | 1326/0
197
         914 | 0x9204 ExposureBiasValue         | SRATIONAL |        1 |      1334 | 1334/0
198
         926 | 0x9205 MaxApertureValue          |  RATIONAL |        1 |      1342 | 1342/0
199
         938 | 0x9207 MeteringMode              |     SHORT |        1 |    131072 | 2
200 1 Robin Mills
         950 | 0x9208 LightSource               |     SHORT |        1 |    655360 | 10
201 4 Robin Mills
         962 | 0x9209 Flash                     |     SHORT |        1 |         0 | 0
202
         974 | 0x920a FocalLength               |  RATIONAL |        1 |      1350 | 1350/0
203
         986 | 0x9290 SubSecTime                |     ASCII |        3 | 808845312 | 06
204
         998 | 0x9291 SubSecTimeOriginal        |     ASCII |        3 | 808845312 | 06
205
        1010 | 0x9292 SubSecTimeDigitized       |     ASCII |        3 | 808845312 | 06
206
        1022 | 0xa000 FlashpixVersion           | UNDEFINED |        4 | 808529968 | 0100
207
        1034 | 0xa001 ColorSpace                |     SHORT |        1 |4294901760 | 65535
208
        1046 | 0xa002 PixelXDimension           |      LONG |        1 |       200 | 200
209
        1058 | 0xa003 PixelYDimension           |      LONG |        1 |       130 | 130
210
        1070 | 0xa217 SensingMethod             |     SHORT |        1 |    131072 | 2
211
        1082 | 0xa300 FileSource                | UNDEFINED |        1 |  50331648 | .
212
        1094 | 0xa301 SceneType                 | UNDEFINED |        1 |  16777216 | .
213
        1106 | 0xa401 CustomRendered            |     SHORT |        1 |         0 | 0
214
        1118 | 0xa402 ExposureMode              |     SHORT |        1 |     65536 | 1
215
        1130 | 0xa403 WhiteBalance              |     SHORT |        1 |     65536 | 1
216
        1142 | 0xa404 DigitalZoomRatio          |  RATIONAL |        1 |      1358 | 1358/0
217
        1154 | 0xa405 FocalLengthIn35mmFilm     |     SHORT |        1 |   4128768 | 63
218
        1166 | 0xa406 SceneCaptureType          |     SHORT |        1 |         0 | 0
219
        1178 | 0xa407 GainControl               |     SHORT |        1 |         0 | 0
220
        1190 | 0xa408 Contrast                  |     SHORT |        1 |         0 | 0
221
        1202 | 0xa409 Saturation                |     SHORT |        1 |         0 | 0
222
        1214 | 0xa40a Sharpness                 |     SHORT |        1 |         0 | 0
223
        1226 | 0xa40c SubjectDistanceRange      |     SHORT |        1 |         0 | 0
224
        1238 | 0xa420 ImageUniqueID             |     ASCII |       33 |      1366 | 127c1377b054a3f65bf2754ebb24e7f2 ...
225
    END MemIo
226
       226 | 0x8825 GPSTag                    |      LONG |        1 |      1400 | 1400
227
      1422 | 0x0103 Compression               |     SHORT |        1 |    393216 | 6
228
      1434 | 0x011a XResolution               |  RATIONAL |        1 |      1498 | 1498/0
229
      1446 | 0x011b YResolution               |  RATIONAL |        1 |      1506 | 1506/0
230
      1458 | 0x0128 ResolutionUnit            |     SHORT |        1 |    131072 | 2
231
      1470 | 0x0201 JPEGInterchangeFormat     |      LONG |        1 |      1514 | 1514
232
      1482 | 0x0202 JPEGInterchangeFormatLeng |      LONG |        1 |      4196 | 4196
233
  END MemIo
234
    5722 | 0xffed APP13 |    3038 | Photoshop 3.0.8BIM..........Z...
235
  Record | DataSet | Name                     | Length | Data
236
       1 |      90 | CharacterSet             |      3 | .%G
237
       1 |      90 | CharacterSet             |      3 | .%G
238
       2 |       0 | RecordVersion            |      2 | ..
239
       2 |     120 | Caption                  |    402 | 040621-N-6536T-062.USS Ronald Reagan (CV...
240
       2 |     122 | Writer                   |      9 | Dir. NVNS
241
       2 |      40 | SpecialInstructions      |     49 | Credit as U.S. Navy photo by Elizabeth T...
242
       2 |      80 | Byline                   |     32 | Photographer..s Mate 3rd Class (
243
       2 |      85 | BylineTitle              |     21 | U.S Navy Photographer
244
       2 |     110 | Credit                   |      8 | U.S Navy
245
       2 |     115 | Source                   |     24 | Navy Visual News Service
246
       2 |       5 | ObjectName               |     18 | 040621-N-6536T-062
247
       2 |      55 | DateCreated              |      8 | 20040621
248
       2 |      60 | TimeCreated              |     11 | 000000+0000
249
       2 |      62 | DigitizationDate         |      8 | 20040621
250
       2 |      63 | DigitizationTime         |     11 | 233753-0400
251
       2 |      90 | City                     |     19 | Straits of Magellan
252
       2 |     101 | CountryName              |     13 | South America
253 1 Robin Mills
       2 |      15 | Category                 |      1 | N
254
       2 |      20 | SuppCategory             |     12 | 703-614-9154
255
       2 |      20 | SuppCategory             |     23 | navyvisualnews@navy.mil
256
       2 |      20 | SuppCategory             |     11 | UNCLASSFIED
257
       2 |      10 | Urgency                  |      1 | 5
258
       2 |      25 | Keywords                 |     13 | ronald reagan
259
       2 |      25 | Keywords                 |      6 | reagan
260
       2 |      25 | Keywords                 |      6 | cvn 76
261
       2 |      25 | Keywords                 |      6 | cvn-76
262
       2 |      25 | Keywords                 |     18 | straights magellan
263
       2 |      25 | Keywords                 |      8 | magellan
264
       2 |      25 | Keywords                 |      7 | carrier
265
       2 |      25 | Keywords                 |     12 | nimitz-class
266
       2 |      25 | Keywords                 |      4 | ship
267
       2 |      25 | Keywords                 |      8 | underway
268
    8762 | 0xffe1 APP1  |    5329 | http://ns.adobe.com/xap/1.0/.<?x
269
   14093 | 0xffe2 APP2  |     576 | ICC_PROFILE......0ADBE....mntrRG chunk 1/1
270
   14671 | 0xffee APP14 |      14 | Adobe.d@......
271
   14687 | 0xffdb DQT   |     132 
272
   14821 | 0xffc0 SOF0  |      17 
273
   14840 | 0xffdd DRI   |       4 
274
   14846 | 0xffc4 DHT   |     418 
275 10 Robin Mills
   15266 | 0xffda SOS  
276 1 Robin Mills
$ </pre>