1Image::ExifTool::MIE(3)User Contributed Perl DocumentatioInmage::ExifTool::MIE(3)
2
3
4
6 Image::ExifTool::MIE - Read/write MIE meta information
7
9 This module is used by Image::ExifTool
10
12 This module contains routines required by Image::ExifTool to read and
13 write information in MIE files.
14
16 MIE stands for "Meta Information Encapsulation". The MIE format is an
17 extensible, dedicated meta information format which supports storage of
18 binary as well as textual meta information. MIE can be used to
19 encapsulate meta information from many sources and bundle it together
20 with any type of file.
21
22 Features
23 Below is very subjective score card comparing the features of a number
24 of common file and meta information formats, and comparing them to MIE.
25 The following features are rated for each format with a score of 0 to
26 10:
27
28 1) Extensible (can incorporate user-defined information).
29 2) Meaningful tag ID's (hint to meaning of unknown information).
30 3) Sequential read/write ability (streamable).
31 4) Hierarchical information structure.
32 5) Easy to implement reader/writer/editor.
33 6) Order of information well defined.
34 7) Large data lengths supported: >64kB (+5) and >4GB (+5).
35 8) Localized text strings.
36 9) Multiple documents in a single file.
37 10) Compact format doesn't squander disk space or bandwidth.
38 11) Compressed meta information supported.
39 12) Relocatable data elements (ie. no fixed offsets).
40 13) Binary meta information (+7) with variable byte order (+3).
41 14) Mandatory tags not required (an unnecessary complication).
42 15) Append information to end of file without editing.
43
44 Feature number Total
45 Format 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Score
46 ------ --------------------------------------------- -----
47 MIE 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 150
48 PDF 10 10 0 10 0 0 10 0 10 10 10 0 7 10 10 97
49 PNG 10 10 10 0 8 0 5 10 0 10 10 10 0 10 0 93
50 XMP 10 10 10 10 2 0 10 10 10 0 0 10 0 10 0 92
51 AIFF 0 5 10 10 10 0 5 0 0 10 0 10 7 10 0 77
52 RIFF 0 5 10 10 10 0 5 0 0 10 0 10 7 10 0 77
53 JPEG 10 0 10 0 10 0 0 0 0 10 0 10 7 10 0 67
54 EPS 10 10 10 0 0 0 10 0 10 0 0 5 0 10 0 65
55 CIFF 0 0 0 10 10 0 5 0 0 10 0 10 10 10 0 65
56 TIFF 0 0 0 10 5 10 5 0 10 10 0 0 10 0 0 60
57 EXIF 0 0 0 10 5 10 0 0 0 10 0 0 10 0 0 45
58 IPTC 0 0 10 0 8 0 0 0 0 10 0 10 7 0 0 45
59
60 By design, MIE ranks highest by a significant margin. Other formats
61 with reasonable scores are PDF, PNG and XMP, but each has significant
62 weak points. What may be surprising is that TIFF, EXIF and IPTC rank
63 so low.
64
65 As well as scoring high in all these features, the MIE format has the
66 unique ability to encapsulate any other type of file, and provides a
67 non-invasive method of adding meta information to a file. The meta
68 information is logically separated from the original file data, which
69 is extremely important because meta information is routinely lost when
70 files are edited.
71
72 Also, the MIE format supports multiple files by simple concatenation,
73 enabling all kinds of wonderful features such as linear databases, edit
74 histories or non-intrusive file updates. This ability can also be
75 leveraged to allow MIE-format trailers to be added to some other file
76 types.
77
79 File Structure
80 A MIE file consists of a series of MIE elements. A MIE element may
81 contain either data or a group of MIE elements, providing a
82 hierarchical format for storing data. Each MIE element is identified
83 by a human-readable tag name, and may store data from zero to 2^64-1
84 bytes in length.
85
86 File Signature
87 The first element in the MIE file must be an uncompressed MIE group
88 element with a tag name of "0MIE". This restriction allows the first 8
89 bytes of a MIE file to be used to identify a MIE format file. The
90 following table lists the two possible initial byte sequences for a
91 MIE-format file (the first for big-endian, and the second for little-
92 endian byte ordering):
93
94 Byte Number: 0 1 2 3 4 5 6 7
95
96 C Characters: ~ \x10 \x04 ? 0 M I E
97 or ~ \x18 \x04 ? 0 M I E
98
99 Hexadecimal: 7e 10 04 ? 30 4d 49 45
100 or 7e 18 04 ? 30 4d 49 45
101
102 Decimal: 126 16 4 ? 48 77 73 69
103 or 126 24 4 ? 48 77 73 69
104
105 Note that byte 1 may have one of the two possible values (0x10 or
106 0x18), and byte 3 may have any value (0x00 to 0xff).
107
108 Element Structure
109 1 byte SyncByte = 0x7e (decimal 126, character '~')
110 1 byte FormatCode (see below)
111 1 byte TagLength (T)
112 1 byte DataLength (gives D if DataLength < 253)
113 T bytes TagName (T given by TagLength)
114 2 bytes DataLength2 [exists only if DataLength == 255 (0xff)]
115 4 bytes DataLength4 [exists only if DataLength == 254 (0xfe)]
116 8 bytes DataLength8 [exists only if DataLength == 253 (0xfd)]
117 D bytes DataBlock (D given by DataLength)
118
119 The minimum element length is 4 bytes (for a group terminator). The
120 maximum DataBlock size is 2^64-1 bytes. TagLength and DataLength are
121 unsigned integers, and the byte ordering for multi-byte DataLength
122 fields is specified by the containing MIE group element. The SyncByte
123 is byte aligned, so no padding is added to align on an N-byte boundary.
124
125 FormatCode
126
127 The format code is a bitmask that defines the format of the data:
128
129 7654 3210
130 ++++ ---- FormatType
131 ---- +--- TypeModifier
132 ---- -+-- Compressed
133 ---- --++ FormatSize
134
135 FormatType (bitmask 0xf0):
136 0x00 - other (or unknown) data
137 0x10 - MIE group
138 0x20 - text string
139 0x30 - list of null-separated text strings
140 0x40 - integer
141 0x50 - rational
142 0x60 - fixed point
143 0x70 - floating point
144 0x80 - free space
145
146 TypeModifier (bitmask 0x08):
147 Modifies the meaning of certain FormatTypes (0x00-0x60):
148
149 0x08 - other data sensitive to MIE group byte order
150 0x18 - MIE group with little-endian byte ordering
151 0x28 - UTF encoded text string
152 0x38 - UTF encoded text string list
153 0x48 - signed integer
154 0x58 - signed rational (denominator is always unsigned)
155 0x68 - signed fixed-point
156
157 Compressed (bitmask 0x04):
158 If this bit is set, the data block is compressed using Zlib
159 deflate. An entire MIE group may be compressed, with the exception
160 of file-level groups.
161
162 FormatSize (bitmask 0x03):
163 Gives the byte size of each data element:
164
165 0x00 - 8 bits (1 byte)
166 0x01 - 16 bits (2 bytes)
167 0x02 - 32 bits (4 bytes)
168 0x03 - 64 bits (8 bytes)
169
170 The number of bytes in a single value for this format is given by
171 2**FormatSize (or 1 << FormatSize). The number of values is the
172 data length divided by this number of bytes. It is an error if the
173 data length is not an even multiple of the format size in bytes.
174
175 The following is a list of all currently defined MIE FormatCode values
176 for uncompressed data (add 0x04 to each value for compressed data):
177
178 0x00 - other data (insensitive to MIE group byte order) (1)
179 0x01 - other 16-bit data (may be byte swapped)
180 0x02 - other 32-bit data (may be byte swapped)
181 0x03 - other 64-bit data (may be byte swapped)
182 0x08 - other data (sensitive to MIE group byte order) (1)
183 0x10 - MIE group with big-endian values (1)
184 0x18 - MIE group with little-endian values (1)
185 0x20 - ASCII (ISO 8859-1) string (2,3)
186 0x28 - UTF-8 string (2,3,4)
187 0x29 - UTF-16 string (2,3,4)
188 0x2a - UTF-32 string (2,3,4)
189 0x30 - ASCII (ISO 8859-1) string list (3,5)
190 0x38 - UTF-8 string list (3,4,5)
191 0x39 - UTF-16 string list (3,4,5)
192 0x3a - UTF-32 string list (3,4,5)
193 0x40 - unsigned 8-bit integer
194 0x41 - unsigned 16-bit integer
195 0x42 - unsigned 32-bit integer
196 0x43 - unsigned 64-bit integer (6)
197 0x48 - signed 8-bit integer
198 0x49 - signed 16-bit integer
199 0x4a - signed 32-bit integer
200 0x4b - signed 64-bit integer (6)
201 0x52 - unsigned 32-bit rational (16-bit numerator then denominator) (7)
202 0x53 - unsigned 64-bit rational (32-bit numerator then denominator) (7)
203 0x5a - signed 32-bit rational (denominator is unsigned) (7)
204 0x5b - signed 64-bit rational (denominator is unsigned) (7)
205 0x61 - unsigned 16-bit fixed-point (high 8 bits is integer part) (8)
206 0x62 - unsigned 32-bit fixed-point (high 16 bits is integer part) (8)
207 0x69 - signed 16-bit fixed-point (high 8 bits is signed integer) (8)
208 0x6a - signed 32-bit fixed-point (high 16 bits is signed integer) (8)
209 0x72 - 32-bit IEEE float (not recommended for portability reasons)
210 0x73 - 64-bit IEEE double (not recommended for portability reasons) (6)
211 0x80 - free space (value data does not contain useful information)
212
213 Notes:
214
215 1. The byte ordering specified by the MIE group TypeModifier applies
216 to the MIE group element as well as all elements within the group.
217 Data for all FormatCodes except 0x08 (other data, sensitive to byte
218 order) may be transferred between MIE groups with different byte
219 order by byte swapping the uncompressed data according to the
220 specified data format. The following list illustrates the byte-
221 swapping pattern, based on FormatSize, for all format types except
222 rational (FormatType 0x50).
223
224 FormatSize Change in Byte Sequence
225 -------------- -----------------------------------
226 0x00 (8 bits) 0 1 2 3 4 5 6 7 --> 0 1 2 3 4 5 6 7 (no change)
227 0x01 (16 bits) 0 1 2 3 4 5 6 7 --> 1 0 3 2 5 4 7 6
228 0x02 (32 bits) 0 1 2 3 4 5 6 7 --> 3 2 1 0 7 6 5 4
229 0x03 (64 bits) 0 1 2 3 4 5 6 7 --> 7 6 5 4 3 2 1 0
230
231 Rational values consist of two integers, so they are swapped as the
232 next lower FormatSize. For example, a 32-bit rational (FormatSize
233 0x02, and FormatCode 0x52 or 0x5a) is swapped as two 16-bit values
234 (ie. as if it had FormatSize 0x01).
235
236 2. The TagName of a string element may have an 6-character suffix to
237 indicate a specific locale. (eg. "Title-en_US", or
238 "Keywords-de_DE").
239
240 3. Text strings are not normally null terminated, however they may be
241 padded with one or more null characters to the end of the data
242 block to allow strings to be edited within fixed-length data
243 blocks. Newlines in the text are indicated by a single LF (0x0a)
244 character.
245
246 4. UTF strings must not begin with a byte order mark (BOM) since the
247 byte order and byte size are specified by the MIE format. If a BOM
248 is found, it should be treated as a zero-width non-breaking space.
249
250 5. A list of text strings separated by null characters. These lists
251 must not be null padded or null terminated, since this would be
252 interpreted as additional zero-length strings. For ASCII and UTF-8
253 strings, the null character is a single zero (0x00) byte. For
254 UTF-16 or UTF-32 strings, the null character is 2 or 4 zero bytes
255 respectively.
256
257 6. 64-bit integers and doubles are subject to the specified byte
258 ordering for both 32-bit words and bytes within these words. For
259 instance, the high order byte is always the first byte if big-
260 endian, and the eighth byte if little-endian. This means that some
261 swapping is always necessary for these values on systems where the
262 byte order differs from the word order (eg. some ARM systems),
263 regardless of the endian-ness of the stored values.
264
265 7. Rational values are treated as two separate integers. The
266 numerator always comes first regardless of the byte ordering. In a
267 signed rational value, only the numerator is signed. The
268 denominator of all rational values is unsigned (eg. a signed 64-bit
269 rational of 0x80000000/0x80000000 evaluates to -1, not +1).
270
271 8. 32-bit fixed point values are converted to floating point by
272 treating them as an integer and dividing by an appropriate value.
273 eg)
274
275 16-bit fixed value = 16-bit integer value / 256.0
276 32-bit fixed value = 32-bit integer value / 65536.0
277
278 TagLength
279
280 Gives the length of the TagName string. Any value between 0 and 255 is
281 valid, but the TagLength of 0 is valid only for the MIE group
282 terminator.
283
284 DataLength
285
286 DataLength is an unsigned byte that gives the number of bytes in the
287 data block. A value between 0 and 252 gives the data length directly,
288 and numbers from 253 to 255 are reserved for extended DataLength codes.
289 Codes of 255, 254 and 253 indicate that the element contains an
290 additional 2, 4 or 8 byte unsigned integer representing the data
291 length.
292
293 0-252 - length of data block
294 255 (0xff) - use DataLength2
295 254 (0xfe) - use DataLength4
296 253 (0xfd) - use DataLength8
297
298 A DataLength of zero is valid for any element except a compressed MIE
299 group. A zero DataLength for an uncompressed MIE group indicates that
300 the group length is unknown. For other elements, a zero length
301 indicates there is no associated data. A terminator element must have
302 a DataLength of 0, 6 or 10, and may not use an extended DataLength.
303
304 TagName
305
306 The TagName string is 0 to 255 bytes long, and is composed of the ASCII
307 characters A-Z, a-z, 0-9 and underline ('_'). Also, a dash ('-') is
308 used to separate the language/country code in the TagName of a
309 localized text string, and a units string (possibly containing other
310 ASCII characters) may be appear in brackets at the end of the TagName.
311 The TagName string is NOT null terminated. A MIE element with a tag
312 string of zero length is reserved for the group terminator.
313
314 MIE elements are sorted alphabetically by TagName within each group.
315 Multiple elements with the same TagName are allowed, even within the
316 same group.
317
318 TagNames should be meaningful. Case is significant. Words should be
319 lowercase with an uppercase first character, and acronyms should be all
320 upper case. The underline ("_") is provided to allow separation of two
321 acronyms or two numbers, but it shouldn't be used unless necessary. No
322 separation is necessary between an acronym and a word (eg.
323 "ISOSetting").
324
325 All TagNames should start with an uppercase letter. An exception to
326 this rule allows tags to begin with a digit (0-9) if they must come
327 before other tags in the sort order, or a lowercase letter (a-z) if
328 they must come after. For instance, the '0Type' element begins with a
329 digit so it comes before, and the 'data' element begins with a
330 lowercase letter so that it comes after meta information tags in the
331 main "0MIE" group.
332
333 Tag names for localized text strings have an 6-character suffix with
334 the following format: The first character is a dash ('-'), followed by
335 a 2-character lower case ISO 639-1 language code, then an underline
336 ('_'), and ending with a 2-character upper case ISO 3166-1 alpha 2
337 country code. (eg. "-en_US", "-en_GB", "-de_DE" or "-fr_FR". Note
338 that "GB", and not "UK" is the code for Great Britain, although "UK"
339 should be recognized for compatibility reasons.) The suffix is
340 included when sorting the tags alphabetically, so the default locale
341 (with no tag-name suffix) always comes first. If the country is
342 unknown or not applicable, a country code of "XX" should be used.
343
344 Tags with numerical values may allow units of measurement to be
345 specified. The units string is stored in brackets at the end of the
346 tag name, and is composed of zero or more ASCII characters in the range
347 0x21 to 0x7d, excluding the bracket characters 0x28 and 0x29. (eg.
348 "Resolution(/cm)" or "SpecificHeat(J/kg.K)".) See
349 Image::ExifTool::MIEUnits for details. Unit strings are not localized,
350 and may not be used in combination with localized text strings.
351
352 Sets of tags which would require a common prefix should be added in a
353 separate MIE group instead of adding the prefix to all tag names. For
354 example, instead of these TagName's:
355
356 ExternalFlashType
357 ExternalFlashSerialNumber
358 ExternalFlashFired
359
360 one would instead designate a separate "ExternalFlash" MIE group to
361 contain the following elements:
362
363 Type
364 SerialNumber
365 Fired
366
367 DataLength2/4/8
368
369 These extended DataLength fields exist only if DataLength is 255, 254
370 or 253, and are respectively 2, 4 or 8 byte unsigned integers giving
371 the data block length. One of these values must be used if the data
372 block is larger than 252 bytes, but they may be used if desired for
373 smaller blocks too (although this may add a few unnecessary bytes to
374 the MIE element).
375
376 DataBlock
377
378 The data value for the MIE element. The format of the data is given by
379 the FormatCode. For MIE group elements, the data includes all
380 contained elements and the group terminator.
381
382 MIE groups
383 All MIE data elements must be contained within a group. A group begins
384 with a MIE group element, and ends with a group terminator. Groups may
385 be nested in a hierarchy to arbitrary depth.
386
387 A MIE group element is identified by a format code of 0x10 (big endian
388 byte ordering) or 0x18 (little endian). The group terminator is
389 distinguished by a zero TagLength (it is the only element allowed to
390 have a zero TagLength), and has a FormatCode of 0x00.
391
392 The MIE group element is permitted to have a zero DataLength only if
393 the data is uncompressed. This special value indicates that the group
394 length is unknown (otherwise the minimum value for DataLength is 4,
395 corresponding the the minimum group size which includes a terminator of
396 at least 4 bytes). If DataLength is zero, all elements in the group
397 must be parsed until the group terminator is found. If non-zero,
398 DataLength includes the length of all elements contained within the
399 group, including the group terminator. Use of a non-zero DataLength is
400 encouraged because it allows readers quickly skip over entire MIE
401 groups. For compressed groups DataLength must be non-zero, and is the
402 length of the compressed group data (which includes the compressed
403 group terminator).
404
405 Group Terminator
406
407 The group terminator has a FormatCode and TagLength of zero. The
408 terminator DataLength must be 0, 6 or 10 bytes, and extended DataLength
409 codes may not be used. With a zero DataLength, the byte sequence for a
410 terminator is "7e 00 00 00" (hex). With a DataLength of 6 or 10 bytes,
411 the terminator data block contains information about the length and
412 byte ordering of the preceding group. This additional information is
413 recommended for file-level groups, and is used in multi-document MIE
414 files and MIE trailers to allow the file to be scanned backwards from
415 the end. (This may also allow some documents to be recovered if part
416 of the file is corrupted.) The structure of this optional terminator
417 data block is as follows:
418
419 4 or 8 bytes GroupLength (unsigned integer)
420 1 byte ByteOrder (0x10 or 0x18, same as MIE group)
421 1 byte GroupLengthSize (0x04 or 0x08)
422
423 The ByteOrder and GroupLengthSize values give the byte ordering and
424 size of the GroupLength integer. The GroupLength value is the total
425 length of the entire MIE group ending with this terminator, including
426 the opening MIE group element and the terminator itself.
427
428 File-level MIE groups
429
430 File-level MIE groups may NOT be compressed.
431
432 All elements in a MIE file are contained within a special group with a
433 TagName of "0MIE". The purpose of the "OMIE" group is to provide a
434 unique signature at the start of the file, and to encapsulate
435 information allowing files to be easily combined. The "0MIE" group
436 must be terminated like any other group, but it is recommended that the
437 terminator of a file-level group include the optional data block
438 (defined above) to provide information about the group length and byte
439 order.
440
441 It is valid to have more than one "0MIE" group at the file level,
442 allowing multiple documents in a single MIE file. Furthermore, the MIE
443 structure enables multi-document files to be generated by simply
444 concatenating two or more MIE files.
445
446 Scanning Backwards through a MIE File
447 The steps below give an algorithm to quickly locate the last document
448 in a MIE file:
449
450 1. Read the last 10 bytes of the file. (Note that a valid MIE file
451 may be as short as 12 bytes long, but a file this length contains
452 only an an empty MIE group.)
453
454 2. If the last byte of the file is zero, then it is not possible to
455 scan backward through the file, so the file must be scanned from
456 the beginning. Otherwise, proceed to the next step.
457
458 3. If the last byte is 4 or 8, the terminator contains information
459 about the byte ordering and length of the group. Otherwise, stop
460 here because this isn't a valid MIE file.
461
462 4. The next-to-last byte must be either 0x10 indicating big-endian
463 byte ordering or 0x18 for little-endian ordering, otherwise this
464 isn't a valid MIE file.
465
466 5. The value of the preceding 4 or 8 bytes gives the length of the
467 complete file-level MIE group (GroupLength). This length includes
468 both the leading MIE group element and the terminator element
469 itself. The value is an unsigned integer with a byte length given
470 in step 3), and a byte order from step 4). From the current file
471 position (at the end of the data read in step 1), seek backward by
472 this number of bytes to find the start of the MIE group element for
473 this document.
474
475 This algorithm may be repeated again beginning at this point in the
476 file to locate the next-to-last document, etc.
477
478 The table below lists all 5 valid patterns for the last 14 bytes of a
479 file-level MIE group, with all numbers in hex. The comments indicate
480 the length and byte ordering of GroupLength (xx) if available:
481
482 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 7e 00 00 00 - (no GroupLength)
483 ?? ?? ?? ?? 7e 00 00 06 xx xx xx xx 10 04 - 4 bytes, big endian
484 ?? ?? ?? ?? 7e 00 00 06 xx xx xx xx 18 04 - 4 bytes, little endian
485 7e 00 00 0a xx xx xx xx xx xx xx xx 10 08 - 8 bytes, big endian
486 7e 00 00 0a xx xx xx xx xx xx xx xx 18 08 - 8 bytes, little endian
487
488 Trailer Signature
489 The MIE format may be used for trailer information appended to other
490 types of files. When this is done, a signature must appear at the end
491 of the main MIE group to uniquely identify the MIE format trailer. To
492 achieve this, a "zmie" trailer signature is written as the last element
493 in the main "0MIE" group. This element has a FormatCode of 0, a
494 TagLength of 4, a DataLength of 0, and a TagName of "zmie". With this
495 signature, the hex byte sequence "7e 00 04 00 7a 6d 69 65" appears
496 immediately before the final group terminator, and the last 22 bytes of
497 the trailer correspond to one of the following 4 patterns (where the
498 trailer length is given by "xx", as above):
499
500 ?? ?? ?? ?? 7e 00 04 00 7a 6d 69 65 7e 00 00 06 xx xx xx xx 10 04
501 ?? ?? ?? ?? 7e 00 04 00 7a 6d 69 65 7e 00 00 06 xx xx xx xx 18 04
502 7e 00 04 00 7a 6d 69 65 7e 00 00 0a xx xx xx xx xx xx xx xx 10 08
503 7e 00 04 00 7a 6d 69 65 7e 00 00 0a xx xx xx xx xx xx xx xx 18 08
504
505 Note that the zero-DataLength terminator may not be used here because
506 the trailer length must be known for seeking backwards from the end of
507 the file.
508
509 Multiple trailers may be appended to the same file using this
510 technique.
511
512 MIE Data Values
513 MIE data values for a given tag are usually not restricted to a
514 specific FormatCode. Any value may be represented in any appropriate
515 format, including numbers represented in string (ASCII or UTF) form.
516
517 It is preferred that closely related values with the same format are
518 written to a single tag instead of using multiple tags. This improves
519 localization of like values and decreases MIE element overhead. For
520 instance, instead of separate ImageWidth and ImageHeight tags, a single
521 ImageSize tag is defined.
522
523 Tags which may take on a discrete set of values should have meaningful
524 values if possible. This improves the extensibility of the format and
525 allows a more reasonable interpretation of unrecognized values.
526
527 Numerical Representation
528
529 Integer and floating point numbers may be represented in binary or
530 string form. In string form, integers are a series of digits with an
531 optional leading sign (eg. "[+|-]DDDDDD"), and multiple values are
532 separated by a single space character (eg. "23 128 -32"). Floating
533 point numbers are similar but may also contain a decimal point and/or a
534 signed exponent with a leading 'e' character (eg.
535 "[+|-]DD[.DDDDDD][e(+|-)EEE]"). The string "inf" is used to represent
536 infinity. One advantage of numerical strings is that they can have an
537 arbitrarily high precision because the possible number of significant
538 digits is virtually unlimited.
539
540 Note that numerical values may have associated units of measurement
541 which are specified in the "TagName" string.
542
543 Date/Time Format
544
545 All MIE dates are strings in the form "YYYY:mm:dd HH:MM:SS.ss+HH:MM".
546 The fractional seconds (".ss") are optional, and if included may
547 contain any number of significant digits (unlike all other fields which
548 are a fixed number of digits and must be padded with leading zeros if
549 necessary). The timezone ("+HH:MM" or "-HH:MM") is recommended but not
550 required. If not given, the local system timezone is assumed.
551
552 MIME Type
553 The basic MIME type for a MIE file is "application/x-mie", however the
554 specific MIME type depends on the type of subfile, and is obtained by
555 adding "x-mie-" to the MIME type of the subfile. For example, with a
556 subfile of type "image/jpeg", the MIE file MIME type is
557 "image/x-mie-jpeg". But note that the "x-" is not duplicated if the
558 subfile MIME type already starts with "x-". So a subfile with MIME
559 type "image/x-raw" is contained within a MIE file of type
560 "image/x-mie-raw", not "image/x-mie-x-raw". In the case of multiple
561 documents in a MIE file, the MIME type is taken from the first
562 document. Regardless of the subfile type, all MIE-format files should
563 have a filename extension of ".MIE".
564
565 Levels of Support
566 Basic MIE reader/writer applications may choose not to provide support
567 for some advanced features of the MIE format. Features which may not
568 be supported by all software are:
569
570 Compression
571 Software not supporting compression must ignore compressed elements
572 and groups, but should be able to process the remaining
573 information.
574
575 Large data lengths
576 Some software may limit the maximum size of a MIE group or element.
577 Historically, a limit of 2GB may be imposed by some systems.
578 However, 8-byte data lengths should be supported by all
579 applications provided the value doesn't exceed the system limit.
580 (eg. For systems with a 2GB limit, 8-byte data lengths should be
581 supported if the upper 17 bits are all zero.) If a data length
582 above the system limit is encountered, it may be necessary for the
583 application to stop processing if it can not seek to the next
584 element in the file.
585
587 This section gives examples for working with MIE information using
588 ExifTool.
589
590 Encapsulating Information with Data in a MIE File
591 The following command encapsulates any file recognized by ExifTool
592 inside a MIE file, and initializes MIE tags from information within the
593 file:
594
595 exiftool -o new.mie -tagsfromfile FILE '-mie:all<all' \
596 '-subfilename<filename' '-subfiletype<filetype' \
597 '-subfilemimetype<mimetype' '-subfiledata<=FILE'
598
599 where "FILE" is the name of the file.
600
601 For unrecognized files, this command may be used:
602
603 exiftool -o new.mie -subfilename=FILE -subfiletype=TYPE \
604 -subfilemimetype=MIME '-subfiledata<=FILE'
605
606 where "TYPE" and "MIME" represent the source file type and MIME type
607 respectively.
608
609 Adding a MIE Trailer to a File
610 The MIE format may also be used to store information in a trailer
611 appended to another type of file. Beware that trailers may not be
612 compatible with all file formats, but JPEG and TIFF are two formats
613 where additional trailer information doesn't create any problems for
614 normal parsing of the file. Also note that this technique has the
615 disadvantage that trailer information is commonly lost if the file is
616 subsequently edited by other software.
617
618 Creating a MIE trailer with ExifTool is a two-step process since
619 ExifTool can't currently be used to add a MIE trailer directly. The
620 example below illustrates the steps for adding a MIE trailer with a
621 small preview image ("small.jpg") to a destination JPEG image
622 ("dst.jpg").
623
624 Step 1) Create a MIE file with a TrailerSignature containing the
625 desired information:
626
627 exiftool -o new.mie -trailersignature=1 -tagsfromfile small.jpg \
628 '-previewimagetype<filetype' '-previewimagesize<imagesize' \
629 '-previewimagename<filename' '-previewimage<=small.jpg'
630
631 Step 2) Append the MIE information to another file. In Unix, this can
632 be done with the 'cat' command:
633
634 cat new.mie >> dst.jpg
635
636 Once added, ExifTool may be used to edit or delete a MIE trailer in a
637 JPEG or TIFF image.
638
639 Multiple MIE Documents in a Single File
640 The MIE specification allows multiple MIE documents (or trailers) to
641 exist in a single file. A file like this may be created by simply
642 concatenating MIE documents. ExifTool may be used to access
643 information in a specific document by adding a copy number to the MIE
644 group name. For example:
645
646 # write the Author tag in the second MIE document
647 exiftool -mie2:author=phil test.mie
648
649 # delete the first MIE document from a file
650 exiftool -mie1:all= test.mie
651
652 Units of Measurement
653 Some MIE tags allow values to be specified in different units of
654 measurement. In the MIE file format these units are combined with the
655 tag name, but when using ExifTool they are specified in brackets after
656 the value:
657
658 exiftool -mie:gpsaltitude='7500(ft)' test.mie
659
660 If no units are provided, the default units are written.
661
662 Localized Text
663 Localized text values are accessed by adding a language/country code to
664 the tag name. For example:
665
666 exiftool -comment-en_us='this is a comment' test.mie
667
669 2010-04-05 - Fixed "Format Size" Note 7 to give the correct number of bits
670 in the example rational value
671 2007-01-21 - Specified LF character (0x0a) for text newline sequence
672 2007-01-19 - Specified ISO 8859-1 character set for extended ASCII codes
673 2007-01-01 - Improved wording of Step 5 for scanning backwards in MIE file
674 2006-12-30 - Added EXAMPLES section and note about UTF BOM
675 2006-12-20 - MIE 1.1: Changed meaning of TypeModifier bit (0x08) for
676 unknown data (FormatType 0x00), and documented byte swapping
677 2006-12-14 - MIE 1.0: Added Data Values and Numerical Representations
678 sections, and added ability to specify units in tag names
679 2006-11-09 - Added Levels of Support section
680 2006-11-03 - Added Trailer Signature
681 2005-11-18 - Original specification created
682
684 Copyright 2003-2022, Phil Harvey (philharvey66 at gmail.com)
685
686 This library is free software; you can redistribute it and/or modify it
687 under the same terms as Perl itself. The MIE format itself is also
688 copyright Phil Harvey, and is covered by the same free-use license.
689
691 <https://exiftool.org/MIE1.1-20070121.pdf>
692
694 "MIE Tags" in Image::ExifTool::TagNames, Image::ExifTool::MIEUnits,
695 Image::ExifTool(3pm)
696
697
698
699perl v5.36.0 2022-07-22 Image::ExifTool::MIE(3)