degal/exif_data.py
author Tero Marttila <terom@fixme.fi>
Sat, 13 Jun 2009 18:34:55 +0300
branchnew-exif
changeset 102 ef2c1ffdca8f
child 103 63e89dc2d6f1
permissions -rw-r--r--
initial exif.py code
102
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
#!/usr/bin/env python
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
# -*- coding: utf-8 -*-
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
"""
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
    EXIF file format data, including tag names, types, etc.
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
    Most of this was copied with modifications from EXIFpy:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
        # Library to extract EXIF information from digital camera image files
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
        # http://sourceforge.net/projects/exif-py/
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
        #
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
        # VERSION 1.1.0
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
        #
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
        # Copyright (c) 2002-2007 Gene Cash All rights reserved
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
        # Copyright (c) 2007-2008 Ianaré Sévi All rights reserved
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
        #
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
        # Redistribution and use in source and binary forms, with or without
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
        # modification, are permitted provided that the following conditions
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
        # are met:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
        #
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
        #  1. Redistributions of source code must retain the above copyright
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
        #     notice, this list of conditions and the following disclaimer.
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
        #
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
        #  2. Redistributions in binary form must reproduce the above
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
        #     copyright notice, this list of conditions and the following
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
        #     disclaimer in the documentation and/or other materials provided
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
        #     with the distribution.
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
        #
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
        #  3. Neither the name of the authors nor the names of its contributors
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
        #     may be used to endorse or promote products derived from this
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
        #     software without specific prior written permission.
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
        #
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
        # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
        # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
        # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
        # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
        # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
        # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
        # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
        # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
        # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
        # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
        # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
"""
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
def make_string (seq):
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
    """
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
        Filter a string to strip out non-printing chars
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
    """
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
    
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51
    # screen out non-printing characters
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
    str = ''.join(c for c in seq if 32 <= c < 256)
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    53
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    54
    if not str:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    55
        # no printing chars
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    56
        return seq
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    57
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    58
    else :
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    59
        return str
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    60
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    61
def make_string_uc (seq) :
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    62
    """
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    63
        # Special version to deal with the code in the first 8 bytes of a user comment.
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    64
        # First 8 bytes gives coding system e.g. ASCII vs. JIS vs Unicode
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    65
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    66
        XXX: decode?
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    67
    """
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    68
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    69
    code = seq[0:8]
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    70
    seq = seq[8:]
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    71
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    72
    ## Of course, this is only correct if ASCII, and the standard explicitly
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    73
    ## allows JIS and Unicode.
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    74
    return make_string(seq)
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    75
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    76
# IFD Tag type information, indexed by code
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    77
#  { type_code: (type_fmt, name) }
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    78
FIELD_TYPES = {
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    79
#    0x0000: (None,  'Proprietary'   ), # ??? no such type
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    80
    0x0001: ('B',   'Byte'          ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    81
    0x0002: ('s',   'ASCII'         ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    82
    0x0003: ('H',   'Short'         ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    83
    0x0004: ('L',   'Long'          ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    84
    0x0005: ('LL',  'Ratio'         ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    85
    0x0006: ('b',   'Signed Byte'   ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    86
    0x0007: ('c',   'Undefined'     ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    87
    0x0008: ('h',   'Signed Short'  ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    88
    0x0009: ('l',   'Signed Long'   ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    89
    0x000A: ('ll',  'Signed Ratio'  ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    90
}
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    91
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    92
def map_value (spec, value) :
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    93
    """
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    94
        Map the given tag value to a printable string using the given value spec.
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    95
    """
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    96
    
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    97
    if callable(spec):
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    98
        # call mapping function
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    99
        return spec(value)
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   100
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   101
    else:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   102
        return spec.get(value, repr(value))
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   103
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   104
# dictionary of main EXIF tag names
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   105
# first element of tuple is tag name, optional second element is
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   106
# another dictionary giving names to values
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   107
# { tag_type : (name, spec?) }
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   108
EXIF_TAGS = {
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   109
    0x0100: ('ImageWidth', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   110
    0x0101: ('ImageLength', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   111
    0x0102: ('BitsPerSample', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   112
    0x0103: ('Compression',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   113
             {1: 'Uncompressed',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   114
              2: 'CCITT 1D',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   115
              3: 'T4/Group 3 Fax',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   116
              4: 'T6/Group 4 Fax',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   117
              5: 'LZW',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   118
              6: 'JPEG (old-style)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   119
              7: 'JPEG',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   120
              8: 'Adobe Deflate',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   121
              9: 'JBIG B&W',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   122
              10: 'JBIG Color',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   123
              32766: 'Next',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   124
              32769: 'Epson ERF Compressed',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   125
              32771: 'CCIRLEW',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   126
              32773: 'PackBits',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   127
              32809: 'Thunderscan',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   128
              32895: 'IT8CTPAD',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   129
              32896: 'IT8LW',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   130
              32897: 'IT8MP',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   131
              32898: 'IT8BL',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   132
              32908: 'PixarFilm',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   133
              32909: 'PixarLog',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   134
              32946: 'Deflate',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   135
              32947: 'DCS',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   136
              34661: 'JBIG',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   137
              34676: 'SGILog',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   138
              34677: 'SGILog24',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   139
              34712: 'JPEG 2000',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   140
              34713: 'Nikon NEF Compressed',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   141
              65000: 'Kodak DCR Compressed',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   142
              65535: 'Pentax PEF Compressed'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   143
    0x0106: ('PhotometricInterpretation', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   144
    0x0107: ('Thresholding', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   145
    0x010A: ('FillOrder', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   146
    0x010D: ('DocumentName', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   147
    0x010E: ('ImageDescription', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   148
    0x010F: ('Make', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   149
    0x0110: ('Model', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   150
    0x0111: ('StripOffsets', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   151
    0x0112: ('Orientation',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   152
             {1: 'Horizontal (normal)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   153
              2: 'Mirrored horizontal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   154
              3: 'Rotated 180',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   155
              4: 'Mirrored vertical',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   156
              5: 'Mirrored horizontal then rotated 90 CCW',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   157
              6: 'Rotated 90 CW',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   158
              7: 'Mirrored horizontal then rotated 90 CW',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   159
              8: 'Rotated 90 CCW'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   160
    0x0115: ('SamplesPerPixel', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   161
    0x0116: ('RowsPerStrip', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   162
    0x0117: ('StripByteCounts', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   163
    0x011A: ('XResolution', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   164
    0x011B: ('YResolution', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   165
    0x011C: ('PlanarConfiguration', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   166
    0x011D: ('PageName', make_string),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   167
    0x0128: ('ResolutionUnit',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   168
             {1: 'Not Absolute',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   169
              2: 'Pixels/Inch',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   170
              3: 'Pixels/Centimeter'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   171
    0x012D: ('TransferFunction', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   172
    0x0131: ('Software', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   173
    0x0132: ('DateTime', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   174
    0x013B: ('Artist', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   175
    0x013E: ('WhitePoint', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   176
    0x013F: ('PrimaryChromaticities', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   177
    0x0156: ('TransferRange', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   178
    0x0200: ('JPEGProc', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   179
    0x0201: ('JPEGInterchangeFormat', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   180
    0x0202: ('JPEGInterchangeFormatLength', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   181
    0x0211: ('YCbCrCoefficients', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   182
    0x0212: ('YCbCrSubSampling', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   183
    0x0213: ('YCbCrPositioning',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   184
             {1: 'Centered',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   185
              2: 'Co-sited'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   186
    0x0214: ('ReferenceBlackWhite', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   187
    
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   188
    0x4746: ('Rating', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   189
    
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   190
    0x828D: ('CFARepeatPatternDim', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   191
    0x828E: ('CFAPattern', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   192
    0x828F: ('BatteryLevel', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   193
    0x8298: ('Copyright', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   194
    0x829A: ('ExposureTime', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   195
    0x829D: ('FNumber', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   196
    0x83BB: ('IPTC/NAA', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   197
    0x8769: ('ExifOffset', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   198
    0x8773: ('InterColorProfile', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   199
    0x8822: ('ExposureProgram',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   200
             {0: 'Unidentified',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   201
              1: 'Manual',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   202
              2: 'Program Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   203
              3: 'Aperture Priority',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   204
              4: 'Shutter Priority',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   205
              5: 'Program Creative',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   206
              6: 'Program Action',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   207
              7: 'Portrait Mode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   208
              8: 'Landscape Mode'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   209
    0x8824: ('SpectralSensitivity', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   210
    0x8825: ('GPSInfo', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   211
    0x8827: ('ISOSpeedRatings', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   212
    0x8828: ('OECF', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   213
    0x9000: ('ExifVersion', make_string),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   214
    0x9003: ('DateTimeOriginal', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   215
    0x9004: ('DateTimeDigitized', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   216
    0x9101: ('ComponentsConfiguration',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   217
             {0: '',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   218
              1: 'Y',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   219
              2: 'Cb',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   220
              3: 'Cr',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   221
              4: 'Red',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   222
              5: 'Green',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   223
              6: 'Blue'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   224
    0x9102: ('CompressedBitsPerPixel', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   225
    0x9201: ('ShutterSpeedValue', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   226
    0x9202: ('ApertureValue', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   227
    0x9203: ('BrightnessValue', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   228
    0x9204: ('ExposureBiasValue', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   229
    0x9205: ('MaxApertureValue', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   230
    0x9206: ('SubjectDistance', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   231
    0x9207: ('MeteringMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   232
             {0: 'Unidentified',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   233
              1: 'Average',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   234
              2: 'CenterWeightedAverage',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   235
              3: 'Spot',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   236
              4: 'MultiSpot',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   237
              5: 'Pattern'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   238
    0x9208: ('LightSource',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   239
             {0: 'Unknown',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   240
              1: 'Daylight',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   241
              2: 'Fluorescent',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   242
              3: 'Tungsten',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   243
              9: 'Fine Weather',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   244
              10: 'Flash',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   245
              11: 'Shade',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   246
              12: 'Daylight Fluorescent',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   247
              13: 'Day White Fluorescent',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   248
              14: 'Cool White Fluorescent',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   249
              15: 'White Fluorescent',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   250
              17: 'Standard Light A',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   251
              18: 'Standard Light B',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   252
              19: 'Standard Light C',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   253
              20: 'D55',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   254
              21: 'D65',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   255
              22: 'D75',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   256
              255: 'Other'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   257
    0x9209: ('Flash',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   258
             {0: 'No',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   259
              1: 'Fired',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   260
              5: 'Fired (?)', # no return sensed
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   261
              7: 'Fired (!)', # return sensed
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   262
              9: 'Fill Fired',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   263
              13: 'Fill Fired (?)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   264
              15: 'Fill Fired (!)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   265
              16: 'Off',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   266
              24: 'Auto Off',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   267
              25: 'Auto Fired',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   268
              29: 'Auto Fired (?)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   269
              31: 'Auto Fired (!)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   270
              32: 'Not Available'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   271
    0x920A: ('FocalLength', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   272
    0x9214: ('SubjectArea', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   273
    0x927C: ('MakerNote', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   274
    0x9286: ('UserComment', make_string_uc),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   275
    0x9290: ('SubSecTime', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   276
    0x9291: ('SubSecTimeOriginal', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   277
    0x9292: ('SubSecTimeDigitized', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   278
    
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   279
    # used by Windows Explorer
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   280
    0x9C9B: ('XPTitle', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   281
    0x9C9C: ('XPComment', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   282
    0x9C9D: ('XPAuthor', ), #(ignored by Windows Explorer if Artist exists)
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   283
    0x9C9E: ('XPKeywords', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   284
    0x9C9F: ('XPSubject', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   285
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   286
    0xA000: ('FlashPixVersion', make_string),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   287
    0xA001: ('ColorSpace',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   288
             {1: 'sRGB',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   289
              2: 'Adobe RGB',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   290
              65535: 'Uncalibrated'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   291
    0xA002: ('ExifImageWidth', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   292
    0xA003: ('ExifImageLength', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   293
    0xA005: ('InteroperabilityOffset', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   294
    0xA20B: ('FlashEnergy', ),               # 0x920B in TIFF/EP
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   295
    0xA20C: ('SpatialFrequencyResponse', ),  # 0x920C
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   296
    0xA20E: ('FocalPlaneXResolution', ),     # 0x920E
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   297
    0xA20F: ('FocalPlaneYResolution', ),     # 0x920F
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   298
    0xA210: ('FocalPlaneResolutionUnit', ),  # 0x9210
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   299
    0xA214: ('SubjectLocation', ),           # 0x9214
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   300
    0xA215: ('ExposureIndex', ),             # 0x9215
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   301
    0xA217: ('SensingMethod',                # 0x9217
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   302
             {1: 'Not defined',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   303
              2: 'One-chip color area',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   304
              3: 'Two-chip color area',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   305
              4: 'Three-chip color area',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   306
              5: 'Color sequential area',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   307
              7: 'Trilinear',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   308
              8: 'Color sequential linear'}),             
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   309
    0xA300: ('FileSource',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   310
             {1: 'Film Scanner',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   311
              2: 'Reflection Print Scanner',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   312
              3: 'Digital Camera'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   313
    0xA301: ('SceneType',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   314
             {1: 'Directly Photographed'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   315
    0xA302: ('CVAPattern', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   316
    0xA401: ('CustomRendered',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   317
             {0: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   318
              1: 'Custom'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   319
    0xA402: ('ExposureMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   320
             {0: 'Auto Exposure',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   321
              1: 'Manual Exposure',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   322
              2: 'Auto Bracket'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   323
    0xA403: ('WhiteBalance',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   324
             {0: 'Auto',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   325
              1: 'Manual'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   326
    0xA404: ('DigitalZoomRatio', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   327
    0xA405: ('FocalLengthIn35mmFilm', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   328
    0xA406: ('SceneCaptureType',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   329
             {0: 'Standard',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   330
              1: 'Landscape',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   331
              2: 'Portrait',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   332
              3: 'Night)'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   333
    0xA407: ('GainControl',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   334
             {0: 'None',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   335
              1: 'Low gain up',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   336
              2: 'High gain up',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   337
              3: 'Low gain down',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   338
              4: 'High gain down'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   339
    0xA408: ('Contrast',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   340
             {0: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   341
              1: 'Soft',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   342
              2: 'Hard'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   343
    0xA409: ('Saturation',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   344
             {0: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   345
              1: 'Soft',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   346
              2: 'Hard'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   347
    0xA40A: ('Sharpness',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   348
             {0: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   349
              1: 'Soft',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   350
              2: 'Hard'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   351
    0xA40B: ('DeviceSettingDescription', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   352
    0xA40C: ('SubjectDistanceRange', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   353
    0xA500: ('Gamma', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   354
    0xC4A5: ('PrintIM', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   355
    0xEA1C:	('Padding', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   356
    }
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   357
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   358
# interoperability tags
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   359
INTR_TAGS = {
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   360
    0x0001: ('InteroperabilityIndex', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   361
    0x0002: ('InteroperabilityVersion', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   362
    0x1000: ('RelatedImageFileFormat', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   363
    0x1001: ('RelatedImageWidth', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   364
    0x1002: ('RelatedImageLength', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   365
    }
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   366
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   367
# GPS tags (not used yet, haven't seen camera with GPS)
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   368
GPS_TAGS = {
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   369
    0x0000: ('GPSVersionID', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   370
    0x0001: ('GPSLatitudeRef', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   371
    0x0002: ('GPSLatitude', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   372
    0x0003: ('GPSLongitudeRef', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   373
    0x0004: ('GPSLongitude', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   374
    0x0005: ('GPSAltitudeRef', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   375
    0x0006: ('GPSAltitude', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   376
    0x0007: ('GPSTimeStamp', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   377
    0x0008: ('GPSSatellites', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   378
    0x0009: ('GPSStatus', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   379
    0x000A: ('GPSMeasureMode', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   380
    0x000B: ('GPSDOP', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   381
    0x000C: ('GPSSpeedRef', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   382
    0x000D: ('GPSSpeed', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   383
    0x000E: ('GPSTrackRef', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   384
    0x000F: ('GPSTrack', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   385
    0x0010: ('GPSImgDirectionRef', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   386
    0x0011: ('GPSImgDirection', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   387
    0x0012: ('GPSMapDatum', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   388
    0x0013: ('GPSDestLatitudeRef', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   389
    0x0014: ('GPSDestLatitude', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   390
    0x0015: ('GPSDestLongitudeRef', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   391
    0x0016: ('GPSDestLongitude', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   392
    0x0017: ('GPSDestBearingRef', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   393
    0x0018: ('GPSDestBearing', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   394
    0x0019: ('GPSDestDistanceRef', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   395
    0x001A: ('GPSDestDistance', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   396
    0x001D: ('GPSDate', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   397
    }
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   398
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   399
# Ignore these tags when quick processing
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   400
# 0x927C is MakerNote Tags
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   401
# 0x9286 is user comment
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   402
IGNORE_TAGS=(0x9286, 0x927C)
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   403
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   404
# http://tomtia.plala.jp/DigitalCamera/MakerNote/index.asp
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   405
def nikon_ev_bias(seq):
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   406
    # First digit seems to be in steps of 1/6 EV.
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   407
    # Does the third value mean the step size?  It is usually 6,
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   408
    # but it is 12 for the ExposureDifference.
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   409
    #
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   410
    # Check for an error condition that could cause a crash.
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   411
    # This only happens if something has gone really wrong in
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   412
    # reading the Nikon MakerNote.
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   413
    if len( seq ) < 4 : return ""
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   414
    #
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   415
    if seq == [252, 1, 6, 0]:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   416
        return "-2/3 EV"
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   417
    if seq == [253, 1, 6, 0]:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   418
        return "-1/2 EV"
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   419
    if seq == [254, 1, 6, 0]:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   420
        return "-1/3 EV"
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   421
    if seq == [0, 1, 6, 0]:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   422
        return "0 EV"
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   423
    if seq == [2, 1, 6, 0]:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   424
        return "+1/3 EV"
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   425
    if seq == [3, 1, 6, 0]:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   426
        return "+1/2 EV"
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   427
    if seq == [4, 1, 6, 0]:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   428
        return "+2/3 EV"
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   429
    # Handle combinations not in the table.
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   430
    a = seq[0]
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   431
    # Causes headaches for the +/- logic, so special case it.
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   432
    if a == 0:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   433
        return "0 EV"
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   434
    if a > 127:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   435
        a = 256 - a
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   436
        ret_str = "-"
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   437
    else:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   438
        ret_str = "+"
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   439
    b = seq[2]	# Assume third value means the step size
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   440
    whole = a / b
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   441
    a = a % b
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   442
    if whole != 0:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   443
        ret_str = ret_str + str(whole) + " "
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   444
    if a == 0:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   445
        ret_str = ret_str + "EV"
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   446
    else:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   447
        r = Ratio(a, b)
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   448
        ret_str = ret_str + r.__repr__() + " EV"
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   449
    return ret_str
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   450
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   451
# Nikon E99x MakerNote Tags
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   452
MAKERNOTE_NIKON_NEWER_TAGS={
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   453
    0x0001: ('MakernoteVersion', make_string),	# Sometimes binary
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   454
    0x0002: ('ISOSetting', make_string),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   455
    0x0003: ('ColorMode', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   456
    0x0004: ('Quality', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   457
    0x0005: ('Whitebalance', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   458
    0x0006: ('ImageSharpening', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   459
    0x0007: ('FocusMode', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   460
    0x0008: ('FlashSetting', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   461
    0x0009: ('AutoFlashMode', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   462
    0x000B: ('WhiteBalanceBias', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   463
    0x000C: ('WhiteBalanceRBCoeff', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   464
    0x000D: ('ProgramShift', nikon_ev_bias),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   465
    # Nearly the same as the other EV vals, but step size is 1/12 EV (?)
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   466
    0x000E: ('ExposureDifference', nikon_ev_bias),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   467
    0x000F: ('ISOSelection', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   468
    0x0011: ('NikonPreview', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   469
    0x0012: ('FlashCompensation', nikon_ev_bias),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   470
    0x0013: ('ISOSpeedRequested', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   471
    0x0016: ('PhotoCornerCoordinates', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   472
    # 0x0017: Unknown, but most likely an EV value
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   473
    0x0018: ('FlashBracketCompensationApplied', nikon_ev_bias),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   474
    0x0019: ('AEBracketCompensationApplied', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   475
    0x001A: ('ImageProcessing', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   476
    0x001B: ('CropHiSpeed', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   477
    0x001D: ('SerialNumber', ),	# Conflict with 0x00A0 ?
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   478
    0x001E: ('ColorSpace', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   479
    0x001F: ('VRInfo', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   480
    0x0020: ('ImageAuthentication', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   481
    0x0022: ('ActiveDLighting', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   482
    0x0023: ('PictureControl', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   483
    0x0024: ('WorldTime', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   484
    0x0025: ('ISOInfo', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   485
    0x0080: ('ImageAdjustment', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   486
    0x0081: ('ToneCompensation', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   487
    0x0082: ('AuxiliaryLens', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   488
    0x0083: ('LensType', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   489
    0x0084: ('LensMinMaxFocalMaxAperture', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   490
    0x0085: ('ManualFocusDistance', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   491
    0x0086: ('DigitalZoomFactor', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   492
    0x0087: ('FlashMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   493
             {0x00: 'Did Not Fire',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   494
              0x01: 'Fired, Manual',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   495
              0x07: 'Fired, External',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   496
              0x08: 'Fired, Commander Mode ',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   497
              0x09: 'Fired, TTL Mode'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   498
    0x0088: ('AFFocusPosition',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   499
             {0x0000: 'Center',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   500
              0x0100: 'Top',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   501
              0x0200: 'Bottom',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   502
              0x0300: 'Left',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   503
              0x0400: 'Right'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   504
    0x0089: ('BracketingMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   505
             {0x00: 'Single frame, no bracketing',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   506
              0x01: 'Continuous, no bracketing',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   507
              0x02: 'Timer, no bracketing',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   508
              0x10: 'Single frame, exposure bracketing',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   509
              0x11: 'Continuous, exposure bracketing',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   510
              0x12: 'Timer, exposure bracketing',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   511
              0x40: 'Single frame, white balance bracketing',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   512
              0x41: 'Continuous, white balance bracketing',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   513
              0x42: 'Timer, white balance bracketing'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   514
    0x008A: ('AutoBracketRelease', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   515
    0x008B: ('LensFStops', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   516
    0x008C: ('NEFCurve1', ),	# ExifTool calls this 'ContrastCurve'
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   517
    0x008D: ('ColorMode', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   518
    0x008F: ('SceneMode', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   519
    0x0090: ('LightingType', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   520
    0x0091: ('ShotInfo', ),	# First 4 bytes are a version number in ASCII
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   521
    0x0092: ('HueAdjustment', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   522
    # ExifTool calls this 'NEFCompression', should be 1-4
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   523
    0x0093: ('Compression', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   524
    0x0094: ('Saturation',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   525
             {-3: 'B&W',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   526
              -2: '-2',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   527
              -1: '-1',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   528
              0: '0',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   529
              1: '1',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   530
              2: '2'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   531
    0x0095: ('NoiseReduction', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   532
    0x0096: ('NEFCurve2', ),	# ExifTool calls this 'LinearizationTable'
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   533
    0x0097: ('ColorBalance', ),	# First 4 bytes are a version number in ASCII
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   534
    0x0098: ('LensData', ),	# First 4 bytes are a version number in ASCII
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   535
    0x0099: ('RawImageCenter', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   536
    0x009A: ('SensorPixelSize', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   537
    0x009C: ('Scene Assist', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   538
    0x009E: ('RetouchHistory', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   539
    0x00A0: ('SerialNumber', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   540
    0x00A2: ('ImageDataSize', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   541
    # 00A3: unknown - a single byte 0
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   542
    # 00A4: In NEF, looks like a 4 byte ASCII version number ('0200')
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   543
    0x00A5: ('ImageCount', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   544
    0x00A6: ('DeletedImageCount', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   545
    0x00A7: ('TotalShutterReleases', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   546
    # First 4 bytes are a version number in ASCII, with version specific
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   547
    # info to follow.  Its hard to treat it as a string due to embedded nulls.
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   548
    0x00A8: ('FlashInfo', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   549
    0x00A9: ('ImageOptimization', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   550
    0x00AA: ('Saturation', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   551
    0x00AB: ('DigitalVariProgram', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   552
    0x00AC: ('ImageStabilization', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   553
    0x00AD: ('Responsive AF', ),	# 'AFResponse'
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   554
    0x00B0: ('MultiExposure', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   555
    0x00B1: ('HighISONoiseReduction', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   556
    0x00B7: ('AFInfo', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   557
    0x00B8: ('FileInfo', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   558
    # 00B9: unknown
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   559
    0x0100: ('DigitalICE', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   560
    0x0103: ('PreviewCompression',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   561
             {1: 'Uncompressed',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   562
              2: 'CCITT 1D',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   563
              3: 'T4/Group 3 Fax',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   564
              4: 'T6/Group 4 Fax',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   565
              5: 'LZW',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   566
              6: 'JPEG (old-style)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   567
              7: 'JPEG',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   568
              8: 'Adobe Deflate',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   569
              9: 'JBIG B&W',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   570
              10: 'JBIG Color',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   571
              32766: 'Next',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   572
              32769: 'Epson ERF Compressed',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   573
              32771: 'CCIRLEW',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   574
              32773: 'PackBits',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   575
              32809: 'Thunderscan',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   576
              32895: 'IT8CTPAD',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   577
              32896: 'IT8LW',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   578
              32897: 'IT8MP',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   579
              32898: 'IT8BL',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   580
              32908: 'PixarFilm',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   581
              32909: 'PixarLog',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   582
              32946: 'Deflate',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   583
              32947: 'DCS',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   584
              34661: 'JBIG',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   585
              34676: 'SGILog',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   586
              34677: 'SGILog24',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   587
              34712: 'JPEG 2000',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   588
              34713: 'Nikon NEF Compressed',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   589
              65000: 'Kodak DCR Compressed',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   590
              65535: 'Pentax PEF Compressed',}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   591
    0x0201: ('PreviewImageStart', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   592
    0x0202: ('PreviewImageLength', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   593
    0x0213: ('PreviewYCbCrPositioning',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   594
             {1: 'Centered',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   595
              2: 'Co-sited'}), 
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   596
    0x0010: ('DataDump', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   597
    }
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   598
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   599
MAKERNOTE_NIKON_OLDER_TAGS = {
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   600
    0x0003: ('Quality',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   601
             {1: 'VGA Basic',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   602
              2: 'VGA Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   603
              3: 'VGA Fine',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   604
              4: 'SXGA Basic',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   605
              5: 'SXGA Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   606
              6: 'SXGA Fine'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   607
    0x0004: ('ColorMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   608
             {1: 'Color',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   609
              2: 'Monochrome'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   610
    0x0005: ('ImageAdjustment',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   611
             {0: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   612
              1: 'Bright+',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   613
              2: 'Bright-',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   614
              3: 'Contrast+',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   615
              4: 'Contrast-'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   616
    0x0006: ('CCDSpeed',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   617
             {0: 'ISO 80',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   618
              2: 'ISO 160',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   619
              4: 'ISO 320',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   620
              5: 'ISO 100'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   621
    0x0007: ('WhiteBalance',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   622
             {0: 'Auto',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   623
              1: 'Preset',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   624
              2: 'Daylight',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   625
              3: 'Incandescent',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   626
              4: 'Fluorescent',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   627
              5: 'Cloudy',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   628
              6: 'Speed Light'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   629
    }
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   630
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   631
# decode Olympus SpecialMode tag in MakerNote
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   632
def olympus_special_mode(v):
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   633
    a={
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   634
        0: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   635
        1: 'Unknown',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   636
        2: 'Fast',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   637
        3: 'Panorama'}
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   638
    b={
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   639
        0: 'Non-panoramic',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   640
        1: 'Left to right',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   641
        2: 'Right to left',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   642
        3: 'Bottom to top',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   643
        4: 'Top to bottom'}
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   644
    if v[0] not in a or v[2] not in b:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   645
        return v
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   646
    return '%s - sequence %d - %s' % (a[v[0]], v[1], b[v[2]])
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   647
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   648
MAKERNOTE_OLYMPUS_TAGS={
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   649
    # ah HAH! those sneeeeeaky bastids! this is how they get past the fact
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   650
    # that a JPEG thumbnail is not allowed in an uncompressed TIFF file
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   651
    0x0100: ('JPEGThumbnail', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   652
    0x0200: ('SpecialMode', olympus_special_mode),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   653
    0x0201: ('JPEGQual',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   654
             {1: 'SQ',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   655
              2: 'HQ',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   656
              3: 'SHQ'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   657
    0x0202: ('Macro',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   658
             {0: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   659
             1: 'Macro',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   660
             2: 'SuperMacro'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   661
    0x0203: ('BWMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   662
             {0: 'Off',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   663
             1: 'On'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   664
    0x0204: ('DigitalZoom', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   665
    0x0205: ('FocalPlaneDiagonal', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   666
    0x0206: ('LensDistortionParams', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   667
    0x0207: ('SoftwareRelease', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   668
    0x0208: ('PictureInfo', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   669
    0x0209: ('CameraID', make_string), # print as string
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   670
    0x0F00: ('DataDump', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   671
    0x0300: ('PreCaptureFrames', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   672
    0x0404: ('SerialNumber', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   673
    0x1000: ('ShutterSpeedValue', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   674
    0x1001: ('ISOValue', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   675
    0x1002: ('ApertureValue', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   676
    0x1003: ('BrightnessValue', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   677
    0x1004: ('FlashMode', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   678
    0x1004: ('FlashMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   679
       {2: 'On',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   680
        3: 'Off'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   681
    0x1005: ('FlashDevice',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   682
       {0: 'None',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   683
        1: 'Internal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   684
        4: 'External',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   685
        5: 'Internal + External'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   686
    0x1006: ('ExposureCompensation', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   687
    0x1007: ('SensorTemperature', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   688
    0x1008: ('LensTemperature', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   689
    0x100b: ('FocusMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   690
       {0: 'Auto',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   691
        1: 'Manual'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   692
    0x1017: ('RedBalance', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   693
    0x1018: ('BlueBalance', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   694
    0x101a: ('SerialNumber', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   695
    0x1023: ('FlashExposureComp', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   696
    0x1026: ('ExternalFlashBounce',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   697
       {0: 'No',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   698
        1: 'Yes'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   699
    0x1027: ('ExternalFlashZoom', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   700
    0x1028: ('ExternalFlashMode', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   701
    0x1029: ('Contrast 	int16u',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   702
       {0: 'High',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   703
        1: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   704
        2: 'Low'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   705
    0x102a: ('SharpnessFactor', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   706
    0x102b: ('ColorControl', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   707
    0x102c: ('ValidBits', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   708
    0x102d: ('CoringFilter', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   709
    0x102e: ('OlympusImageWidth', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   710
    0x102f: ('OlympusImageHeight', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   711
    0x1034: ('CompressionRatio', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   712
    0x1035: ('PreviewImageValid',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   713
       {0: 'No',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   714
        1: 'Yes'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   715
    0x1036: ('PreviewImageStart', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   716
    0x1037: ('PreviewImageLength', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   717
    0x1039: ('CCDScanMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   718
       {0: 'Interlaced',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   719
        1: 'Progressive'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   720
    0x103a: ('NoiseReduction',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   721
       {0: 'Off',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   722
        1: 'On'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   723
    0x103b: ('InfinityLensStep', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   724
    0x103c: ('NearLensStep', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   725
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   726
    # TODO - these need extra definitions
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   727
    # http://search.cpan.org/src/EXIFTOOL/Image-ExifTool-6.90/html/TagNames/Olympus.html
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   728
    0x2010: ('Equipment', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   729
    0x2020: ('CameraSettings', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   730
    0x2030: ('RawDevelopment', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   731
    0x2040: ('ImageProcessing', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   732
    0x2050: ('FocusInfo', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   733
    0x3000: ('RawInfo ', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   734
    }
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   735
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   736
# 0x2020 CameraSettings
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   737
MAKERNOTE_OLYMPUS_TAG_0x2020={
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   738
    0x0100: ('PreviewImageValid',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   739
             {0: 'No',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   740
              1: 'Yes'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   741
    0x0101: ('PreviewImageStart', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   742
    0x0102: ('PreviewImageLength', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   743
    0x0200: ('ExposureMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   744
             {1: 'Manual',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   745
              2: 'Program',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   746
              3: 'Aperture-priority AE',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   747
              4: 'Shutter speed priority AE',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   748
              5: 'Program-shift'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   749
    0x0201: ('AELock',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   750
             {0: 'Off',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   751
              1: 'On'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   752
    0x0202: ('MeteringMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   753
             {2: 'Center Weighted',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   754
              3: 'Spot',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   755
              5: 'ESP',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   756
              261: 'Pattern+AF',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   757
              515: 'Spot+Highlight control',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   758
              1027: 'Spot+Shadow control'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   759
    0x0300: ('MacroMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   760
             {0: 'Off',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   761
              1: 'On'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   762
    0x0301: ('FocusMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   763
             {0: 'Single AF',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   764
              1: 'Sequential shooting AF',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   765
              2: 'Continuous AF',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   766
              3: 'Multi AF',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   767
              10: 'MF'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   768
    0x0302: ('FocusProcess',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   769
             {0: 'AF Not Used',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   770
              1: 'AF Used'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   771
    0x0303: ('AFSearch',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   772
             {0: 'Not Ready',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   773
              1: 'Ready'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   774
    0x0304: ('AFAreas', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   775
    0x0401: ('FlashExposureCompensation', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   776
    0x0500: ('WhiteBalance2',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   777
             {0: 'Auto',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   778
             16: '7500K (Fine Weather with Shade)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   779
             17: '6000K (Cloudy)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   780
             18: '5300K (Fine Weather)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   781
             20: '3000K (Tungsten light)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   782
             21: '3600K (Tungsten light-like)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   783
             33: '6600K (Daylight fluorescent)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   784
             34: '4500K (Neutral white fluorescent)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   785
             35: '4000K (Cool white fluorescent)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   786
             48: '3600K (Tungsten light-like)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   787
             256: 'Custom WB 1',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   788
             257: 'Custom WB 2',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   789
             258: 'Custom WB 3',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   790
             259: 'Custom WB 4',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   791
             512: 'Custom WB 5400K',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   792
             513: 'Custom WB 2900K',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   793
             514: 'Custom WB 8000K', }),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   794
    0x0501: ('WhiteBalanceTemperature', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   795
    0x0502: ('WhiteBalanceBracket', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   796
    0x0503: ('CustomSaturation', ), # (3 numbers: 1. CS Value, 2. Min, 3. Max)
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   797
    0x0504: ('ModifiedSaturation',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   798
             {0: 'Off',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   799
              1: 'CM1 (Red Enhance)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   800
              2: 'CM2 (Green Enhance)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   801
              3: 'CM3 (Blue Enhance)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   802
              4: 'CM4 (Skin Tones)'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   803
    0x0505: ('ContrastSetting', ), # (3 numbers: 1. Contrast, 2. Min, 3. Max)
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   804
    0x0506: ('SharpnessSetting', ), # (3 numbers: 1. Sharpness, 2. Min, 3. Max)
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   805
    0x0507: ('ColorSpace',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   806
             {0: 'sRGB',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   807
              1: 'Adobe RGB',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   808
              2: 'Pro Photo RGB'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   809
    0x0509: ('SceneMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   810
             {0: 'Standard',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   811
              6: 'Auto',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   812
              7: 'Sport',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   813
              8: 'Portrait',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   814
              9: 'Landscape+Portrait',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   815
             10: 'Landscape',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   816
             11: 'Night scene',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   817
             13: 'Panorama',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   818
             16: 'Landscape+Portrait',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   819
             17: 'Night+Portrait',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   820
             19: 'Fireworks',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   821
             20: 'Sunset',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   822
             22: 'Macro',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   823
             25: 'Documents',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   824
             26: 'Museum',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   825
             28: 'Beach&Snow',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   826
             30: 'Candle',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   827
             35: 'Underwater Wide1',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   828
             36: 'Underwater Macro',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   829
             39: 'High Key',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   830
             40: 'Digital Image Stabilization',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   831
             44: 'Underwater Wide2',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   832
             45: 'Low Key',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   833
             46: 'Children',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   834
             48: 'Nature Macro'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   835
    0x050a: ('NoiseReduction',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   836
             {0: 'Off',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   837
              1: 'Noise Reduction',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   838
              2: 'Noise Filter',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   839
              3: 'Noise Reduction + Noise Filter',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   840
              4: 'Noise Filter (ISO Boost)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   841
              5: 'Noise Reduction + Noise Filter (ISO Boost)'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   842
    0x050b: ('DistortionCorrection',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   843
             {0: 'Off',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   844
              1: 'On'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   845
    0x050c: ('ShadingCompensation',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   846
             {0: 'Off',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   847
              1: 'On'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   848
    0x050d: ('CompressionFactor', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   849
    0x050f: ('Gradation',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   850
             {'-1 -1 1': 'Low Key',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   851
              '0 -1 1': 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   852
              '1 -1 1': 'High Key'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   853
    0x0520: ('PictureMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   854
             {1: 'Vivid',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   855
              2: 'Natural',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   856
              3: 'Muted',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   857
              256: 'Monotone',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   858
              512: 'Sepia'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   859
    0x0521: ('PictureModeSaturation', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   860
    0x0522: ('PictureModeHue?', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   861
    0x0523: ('PictureModeContrast', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   862
    0x0524: ('PictureModeSharpness', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   863
    0x0525: ('PictureModeBWFilter',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   864
             {0: 'n/a',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   865
              1: 'Neutral',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   866
              2: 'Yellow',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   867
              3: 'Orange',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   868
              4: 'Red',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   869
              5: 'Green'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   870
    0x0526: ('PictureModeTone',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   871
             {0: 'n/a',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   872
              1: 'Neutral',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   873
              2: 'Sepia',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   874
              3: 'Blue',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   875
              4: 'Purple',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   876
              5: 'Green'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   877
    0x0600: ('Sequence', ), # 2 or 3 numbers: 1. Mode, 2. Shot number, 3. Mode bits
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   878
    0x0601: ('PanoramaMode', ), # (2 numbers: 1. Mode, 2. Shot number)
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   879
    0x0603: ('ImageQuality2',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   880
             {1: 'SQ',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   881
              2: 'HQ',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   882
              3: 'SHQ',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   883
              4: 'RAW'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   884
    0x0901: ('ManometerReading', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   885
    }
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   886
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   887
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   888
MAKERNOTE_CASIO_TAGS={
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   889
    0x0001: ('RecordingMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   890
             {1: 'Single Shutter',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   891
              2: 'Panorama',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   892
              3: 'Night Scene',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   893
              4: 'Portrait',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   894
              5: 'Landscape'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   895
    0x0002: ('Quality',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   896
             {1: 'Economy',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   897
              2: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   898
              3: 'Fine'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   899
    0x0003: ('FocusingMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   900
             {2: 'Macro',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   901
              3: 'Auto Focus',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   902
              4: 'Manual Focus',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   903
              5: 'Infinity'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   904
    0x0004: ('FlashMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   905
             {1: 'Auto',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   906
              2: 'On',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   907
              3: 'Off',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   908
              4: 'Red Eye Reduction'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   909
    0x0005: ('FlashIntensity',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   910
             {11: 'Weak',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   911
              13: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   912
              15: 'Strong'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   913
    0x0006: ('Object Distance', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   914
    0x0007: ('WhiteBalance',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   915
             {1: 'Auto',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   916
              2: 'Tungsten',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   917
              3: 'Daylight',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   918
              4: 'Fluorescent',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   919
              5: 'Shade',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   920
              129: 'Manual'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   921
    0x000B: ('Sharpness',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   922
             {0: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   923
              1: 'Soft',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   924
              2: 'Hard'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   925
    0x000C: ('Contrast',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   926
             {0: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   927
              1: 'Low',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   928
              2: 'High'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   929
    0x000D: ('Saturation',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   930
             {0: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   931
              1: 'Low',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   932
              2: 'High'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   933
    0x0014: ('CCDSpeed',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   934
             {64: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   935
              80: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   936
              100: 'High',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   937
              125: '+1.0',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   938
              244: '+3.0',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   939
              250: '+2.0'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   940
    }
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   941
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   942
MAKERNOTE_FUJIFILM_TAGS={
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   943
    0x0000: ('NoteVersion', make_string),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   944
    0x1000: ('Quality', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   945
    0x1001: ('Sharpness',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   946
             {1: 'Soft',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   947
              2: 'Soft',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   948
              3: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   949
              4: 'Hard',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   950
              5: 'Hard'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   951
    0x1002: ('WhiteBalance',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   952
             {0: 'Auto',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   953
              256: 'Daylight',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   954
              512: 'Cloudy',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   955
              768: 'DaylightColor-Fluorescent',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   956
              769: 'DaywhiteColor-Fluorescent',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   957
              770: 'White-Fluorescent',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   958
              1024: 'Incandescent',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   959
              3840: 'Custom'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   960
    0x1003: ('Color',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   961
             {0: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   962
              256: 'High',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   963
              512: 'Low'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   964
    0x1004: ('Tone',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   965
             {0: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   966
              256: 'High',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   967
              512: 'Low'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   968
    0x1010: ('FlashMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   969
             {0: 'Auto',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   970
              1: 'On',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   971
              2: 'Off',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   972
              3: 'Red Eye Reduction'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   973
    0x1011: ('FlashStrength', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   974
    0x1020: ('Macro',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   975
             {0: 'Off',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   976
              1: 'On'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   977
    0x1021: ('FocusMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   978
             {0: 'Auto',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   979
              1: 'Manual'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   980
    0x1030: ('SlowSync',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   981
             {0: 'Off',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   982
              1: 'On'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   983
    0x1031: ('PictureMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   984
             {0: 'Auto',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   985
              1: 'Portrait',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   986
              2: 'Landscape',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   987
              4: 'Sports',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   988
              5: 'Night',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   989
              6: 'Program AE',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   990
              256: 'Aperture Priority AE',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   991
              512: 'Shutter Priority AE',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   992
              768: 'Manual Exposure'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   993
    0x1100: ('MotorOrBracket',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   994
             {0: 'Off',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   995
              1: 'On'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   996
    0x1300: ('BlurWarning',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   997
             {0: 'Off',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   998
              1: 'On'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   999
    0x1301: ('FocusWarning',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1000
             {0: 'Off',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1001
              1: 'On'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1002
    0x1302: ('AEWarning',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1003
             {0: 'Off',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1004
              1: 'On'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1005
    }
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1006
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1007
MAKERNOTE_CANON_TAGS = {
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1008
    0x0006: ('ImageType', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1009
    0x0007: ('FirmwareVersion', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1010
    0x0008: ('ImageNumber', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1011
    0x0009: ('OwnerName', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1012
    }
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1013
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1014
# this is in element offset, name, optional value dictionary format
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1015
MAKERNOTE_CANON_TAG_0x001 = {
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1016
    1: ('Macromode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1017
        {1: 'Macro',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1018
         2: 'Normal'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1019
    2: ('SelfTimer', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1020
    3: ('Quality',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1021
        {2: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1022
         3: 'Fine',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1023
         5: 'Superfine'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1024
    4: ('FlashMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1025
        {0: 'Flash Not Fired',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1026
         1: 'Auto',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1027
         2: 'On',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1028
         3: 'Red-Eye Reduction',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1029
         4: 'Slow Synchro',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1030
         5: 'Auto + Red-Eye Reduction',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1031
         6: 'On + Red-Eye Reduction',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1032
         16: 'external flash'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1033
    5: ('ContinuousDriveMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1034
        {0: 'Single Or Timer',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1035
         1: 'Continuous'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1036
    7: ('FocusMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1037
        {0: 'One-Shot',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1038
         1: 'AI Servo',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1039
         2: 'AI Focus',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1040
         3: 'MF',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1041
         4: 'Single',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1042
         5: 'Continuous',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1043
         6: 'MF'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1044
    10: ('ImageSize',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1045
         {0: 'Large',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1046
          1: 'Medium',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1047
          2: 'Small'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1048
    11: ('EasyShootingMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1049
         {0: 'Full Auto',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1050
          1: 'Manual',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1051
          2: 'Landscape',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1052
          3: 'Fast Shutter',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1053
          4: 'Slow Shutter',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1054
          5: 'Night',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1055
          6: 'B&W',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1056
          7: 'Sepia',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1057
          8: 'Portrait',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1058
          9: 'Sports',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1059
          10: 'Macro/Close-Up',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1060
          11: 'Pan Focus'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1061
    12: ('DigitalZoom',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1062
         {0: 'None',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1063
          1: '2x',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1064
          2: '4x'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1065
    13: ('Contrast',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1066
         {0xFFFF: 'Low',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1067
          0: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1068
          1: 'High'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1069
    14: ('Saturation',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1070
         {0xFFFF: 'Low',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1071
          0: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1072
          1: 'High'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1073
    15: ('Sharpness',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1074
         {0xFFFF: 'Low',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1075
          0: 'Normal',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1076
          1: 'High'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1077
    16: ('ISO',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1078
         {0: 'See ISOSpeedRatings Tag',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1079
          15: 'Auto',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1080
          16: '50',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1081
          17: '100',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1082
          18: '200',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1083
          19: '400'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1084
    17: ('MeteringMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1085
         {3: 'Evaluative',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1086
          4: 'Partial',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1087
          5: 'Center-weighted'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1088
    18: ('FocusType',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1089
         {0: 'Manual',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1090
          1: 'Auto',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1091
          3: 'Close-Up (Macro)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1092
          8: 'Locked (Pan Mode)'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1093
    19: ('AFPointSelected',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1094
         {0x3000: 'None (MF)',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1095
          0x3001: 'Auto-Selected',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1096
          0x3002: 'Right',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1097
          0x3003: 'Center',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1098
          0x3004: 'Left'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1099
    20: ('ExposureMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1100
         {0: 'Easy Shooting',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1101
          1: 'Program',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1102
          2: 'Tv-priority',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1103
          3: 'Av-priority',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1104
          4: 'Manual',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1105
          5: 'A-DEP'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1106
    23: ('LongFocalLengthOfLensInFocalUnits', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1107
    24: ('ShortFocalLengthOfLensInFocalUnits', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1108
    25: ('FocalUnitsPerMM', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1109
    28: ('FlashActivity',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1110
         {0: 'Did Not Fire',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1111
          1: 'Fired'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1112
    29: ('FlashDetails',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1113
         {14: 'External E-TTL',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1114
          13: 'Internal Flash',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1115
          11: 'FP Sync Used',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1116
          7: '2nd("Rear")-Curtain Sync Used',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1117
          4: 'FP Sync Enabled'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1118
    32: ('FocusMode',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1119
         {0: 'Single',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1120
          1: 'Continuous'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1121
    }
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1122
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1123
MAKERNOTE_CANON_TAG_0x004 = {
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1124
    7: ('WhiteBalance',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1125
        {0: 'Auto',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1126
         1: 'Sunny',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1127
         2: 'Cloudy',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1128
         3: 'Tungsten',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1129
         4: 'Fluorescent',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1130
         5: 'Flash',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1131
         6: 'Custom'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1132
    9: ('SequenceNumber', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1133
    14: ('AFPointUsed', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1134
    15: ('FlashBias',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1135
         {0xFFC0: '-2 EV',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1136
          0xFFCC: '-1.67 EV',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1137
          0xFFD0: '-1.50 EV',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1138
          0xFFD4: '-1.33 EV',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1139
          0xFFE0: '-1 EV',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1140
          0xFFEC: '-0.67 EV',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1141
          0xFFF0: '-0.50 EV',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1142
          0xFFF4: '-0.33 EV',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1143
          0x0000: '0 EV',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1144
          0x000C: '0.33 EV',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1145
          0x0010: '0.50 EV',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1146
          0x0014: '0.67 EV',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1147
          0x0020: '1 EV',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1148
          0x002C: '1.33 EV',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1149
          0x0030: '1.50 EV',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1150
          0x0034: '1.67 EV',
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1151
          0x0040: '2 EV'}),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1152
    19: ('SubjectDistance', ),
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1153
    }
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1154
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1155
# ratio object that eventually will be able to reduce itself to lowest
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1156
# common denominator for printing
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1157
def gcd(a, b):
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1158
    if b == 0:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1159
        return a
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1160
    else:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1161
        return gcd(b, a % b)
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1162
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1163
class Ratio:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1164
    def __init__(self, num, den):
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1165
        self.num = num
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1166
        self.den = den
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1167
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1168
    def __repr__(self):
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1169
        self.reduce()
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1170
        if self.den == 1:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1171
            return str(self.num)
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1172
        return '%d/%d' % (self.num, self.den)
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1173
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1174
    def reduce(self):
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1175
        div = gcd(self.num, self.den)
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1176
        if div > 1:
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1177
            self.num = self.num / div
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1178
            self.den = self.den / div
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1179
ef2c1ffdca8f initial exif.py code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
  1180