1Image::ExifTool::MIE(3)User Contributed Perl DocumentatioInmage::ExifTool::MIE(3)
2
3
4

NAME

6       Image::ExifTool::MIE - Read/write MIE meta information
7

SYNOPSIS

9       This module is used by Image::ExifTool
10

DESCRIPTION

12       This module contains routines required by Image::ExifTool to read and
13       write information in MIE files.
14

WHAT IS MIE?

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

MIE 1.1 FORMAT SPECIFICATION (2007-01-21)

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

EXAMPLES

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

REVISIONS

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

AUTHOR

684       Copyright 2003-2023, 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

REFERENCES

691       <https://exiftool.org/MIE1.1-20070121.pdf>
692

SEE ALSO

694       "MIE Tags" in Image::ExifTool::TagNames, Image::ExifTool::MIEUnits,
695       Image::ExifTool(3pm)
696
697
698
699perl v5.36.1                      2023-11-21           Image::ExifTool::MIE(3)
Impressum