Example #1
0
 def test_load_float(self):
     ifd = TiffImagePlugin.ImageFileDirectory_v2()
     data = b"abcdabcd"
     ret = ifd.load_float(data, False)
     self.assertEqual(ret, (1.6777999408082104e+22, 1.6777999408082104e+22))
Example #2
0
 def test_load_string(self):
     ifd = TiffImagePlugin.ImageFileDirectory_v2()
     data = b"abc\0"
     ret = ifd.load_string(data, False)
     self.assertEqual(ret, "abc")
Example #3
0
 def test_load_byte(self):
     for legacy_api in [False, True]:
         ifd = TiffImagePlugin.ImageFileDirectory_v2()
         data = b"abc"
         ret = ifd.load_byte(data, legacy_api)
         self.assertEqual(ret, b"abc")
Example #4
0
def _getmp(self):
    # Extract MP information.  This method was inspired by the "highly
    # experimental" _getexif version that's been in use for years now,
    # itself based on the ImageFileDirectory class in the TIFF plug-in.

    # The MP record essentially consists of a TIFF file embedded in a JPEG
    # application marker.
    try:
        data = self.info["mp"]
    except KeyError:
        return None
    file_contents = io.BytesIO(data)
    head = file_contents.read(8)
    endianness = '>' if head[:4] == b'\x4d\x4d\x00\x2a' else '<'
    # process dictionary
    try:
        info = TiffImagePlugin.ImageFileDirectory_v2(head)
        info.load(file_contents)
        mp = dict(info)
    except:
        raise SyntaxError("malformed MP Index (unreadable directory)")
    # it's an error not to have a number of images
    try:
        quant = mp[0xB001]
    except KeyError:
        raise SyntaxError("malformed MP Index (no number of images)")
    # get MP entries
    mpentries = []
    try:
        rawmpentries = mp[0xB002]
        for entrynum in range(0, quant):
            unpackedentry = unpack_from(
                '{0}LLLHH'.format(endianness), rawmpentries, entrynum * 16)
            labels = ('Attribute', 'Size', 'DataOffset', 'EntryNo1',
                      'EntryNo2')
            mpentry = dict(zip(labels, unpackedentry))
            mpentryattr = {
                'DependentParentImageFlag': bool(mpentry['Attribute'] &
                                                 (1 << 31)),
                'DependentChildImageFlag': bool(mpentry['Attribute'] &
                                                (1 << 30)),
                'RepresentativeImageFlag': bool(mpentry['Attribute'] &
                                                (1 << 29)),
                'Reserved': (mpentry['Attribute'] & (3 << 27)) >> 27,
                'ImageDataFormat': (mpentry['Attribute'] & (7 << 24)) >> 24,
                'MPType': mpentry['Attribute'] & 0x00FFFFFF
            }
            if mpentryattr['ImageDataFormat'] == 0:
                mpentryattr['ImageDataFormat'] = 'JPEG'
            else:
                raise SyntaxError("unsupported picture format in MPO")
            mptypemap = {
                0x000000: 'Undefined',
                0x010001: 'Large Thumbnail (VGA Equivalent)',
                0x010002: 'Large Thumbnail (Full HD Equivalent)',
                0x020001: 'Multi-Frame Image (Panorama)',
                0x020002: 'Multi-Frame Image: (Disparity)',
                0x020003: 'Multi-Frame Image: (Multi-Angle)',
                0x030000: 'Baseline MP Primary Image'
            }
            mpentryattr['MPType'] = mptypemap.get(mpentryattr['MPType'],
                                                  'Unknown')
            mpentry['Attribute'] = mpentryattr
            mpentries.append(mpentry)
        mp[0xB002] = mpentries
    except KeyError:
        raise SyntaxError("malformed MP Index (bad MP Entry)")
    # Next we should try and parse the individual image unique ID list;
    # we don't because I've never seen this actually used in a real MPO
    # file and so can't test it.
    return mp
Example #5
0
 def test_set_legacy_api(self):
     ifd = TiffImagePlugin.ImageFileDirectory_v2()
     with self.assertRaises(Exception) as e:
         ifd.legacy_api = None
     self.assertEqual(str(e.exception), "Not allowing setting of legacy api")
Example #6
0
 def test_load_double(self):
     ifd = TiffImagePlugin.ImageFileDirectory_v2()
     data = b"abcdefghabcdefgh"
     ret = ifd.load_double(data, False)
     self.assertEqual(ret, (8.540883223036124e194, 8.540883223036124e194))