コード例 #1
0
ファイル: test_file_libtiff.py プロジェクト: esikm/Pillow2
    def test_additional_metadata(self):
        # these should not crash. Seriously dummy data, most of it doesn't make
        # any sense, so we're running up against limits where we're asking
        # libtiff to do stupid things.

        # Get the list of the ones that we should be able to write

        core_items = {
            tag: info
            for tag, info in ((s, TiffTags.lookup(s))
                              for s in TiffTags.LIBTIFF_CORE)
            if info.type is not None
        }

        # Exclude ones that have special meaning
        # that we're already testing them
        im = Image.open('Tests/images/hopper_g4.tif')
        for tag in im.tag_v2:
            try:
                del (core_items[tag])
            except KeyError:
                pass

        # Type codes:
        #     2: "ascii",
        #     3: "short",
        #     4: "long",
        #     5: "rational",
        #     12: "double",
        # type: dummy value
        values = {
            2: 'test',
            3: 1,
            4: 2**20,
            5: TiffImagePlugin.IFDRational(100, 1),
            12: 1.05
        }

        new_ifd = TiffImagePlugin.ImageFileDirectory_v2()
        for tag, info in core_items.items():
            if info.length == 1:
                new_ifd[tag] = values[info.type]
            if info.length == 0:
                new_ifd[tag] = tuple(values[info.type] for _ in range(3))
            else:
                new_ifd[tag] = tuple(values[info.type]
                                     for _ in range(info.length))

        # Extra samples really doesn't make sense in this application.
        del (new_ifd[338])

        out = self.tempfile("temp.tif")
        TiffImagePlugin.WRITE_LIBTIFF = True

        im.save(out, tiffinfo=new_ifd)

        TiffImagePlugin.WRITE_LIBTIFF = False
コード例 #2
0
    def test_exif_div_zero(self):
        im = hopper()
        info = TiffImagePlugin.ImageFileDirectory_v2()
        info[41988] = TiffImagePlugin.IFDRational(0, 0)

        out = self.tempfile('temp.tiff')
        im.save(out, tiffinfo=info, compression='raw')

        reloaded = Image.open(out)
        self.assertEqual(0, reloaded.tag_v2[41988].numerator)
        self.assertEqual(0, reloaded.tag_v2[41988].denominator)
コード例 #3
0
 def test_empty_metadata(self):
     f = io.BytesIO(b'II*\x00\x08\x00\x00\x00')
     head = f.read(8)
     info = TiffImagePlugin.ImageFileDirectory(head)
     try:
         self.assert_warning(UserWarning, info.load, f)
     except struct.error:
         self.fail("Should not be struct errors there.")
コード例 #4
0
    def test_too_many_entries(self):
        ifd = TiffImagePlugin.ImageFileDirectory_v2()

        #    277: ("SamplesPerPixel", SHORT, 1),
        ifd._tagdata[277] = struct.pack('hh', 4, 4)
        ifd.tagtype[277] = TiffTags.SHORT

        try:
            self.assert_warning(UserWarning, lambda: ifd[277])
        except ValueError:
            self.fail("Invalid Metadata count should not cause a Value Error.")
コード例 #5
0
 def test_expty_values(self):
     data = io.BytesIO(
         b'II*\x00\x08\x00\x00\x00\x03\x00\x1a\x01\x05\x00\x00\x00\x00\x00'
         b'\x00\x00\x00\x00\x1b\x01\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00'
         b'\x98\x82\x02\x00\x07\x00\x00\x002\x00\x00\x00\x00\x00\x00\x00a '
         b'text\x00\x00')
     head = data.read(8)
     info = TiffImagePlugin.ImageFileDirectory_v2(head)
     info.load(data)
     try:
         info = dict(info)
     except ValueError:
         self.fail("Should not be struct value error there.")
     self.assertIn(33432, info)
コード例 #6
0
ファイル: test_file_tiff.py プロジェクト: esikm/Pillow2
 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")
コード例 #7
0
ファイル: test_file_tiff.py プロジェクト: esikm/Pillow2
 def test_load_double(self):
     ifd = TiffImagePlugin.ImageFileDirectory_v2()
     data = b"abcdefghabcdefgh"
     ret = ifd.load_double(data, False)
     self.assertEqual(ret, (8.540883223036124e+194, 8.540883223036124e+194))
コード例 #8
0
ファイル: test_file_tiff.py プロジェクト: esikm/Pillow2
 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))
コード例 #9
0
ファイル: test_file_tiff.py プロジェクト: esikm/Pillow2
 def test_load_string(self):
     ifd = TiffImagePlugin.ImageFileDirectory_v2()
     data = b"abc\0"
     ret = ifd.load_string(data, False)
     self.assertEqual(ret, "abc")
コード例 #10
0
ファイル: test_file_tiff.py プロジェクト: esikm/Pillow2
 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")
コード例 #11
0
    def test_rt_metadata(self):
        """ Test writing arbitrary metadata into the tiff image directory
            Use case is ImageJ private tags, one numeric, one arbitrary
            data.  https://github.com/python-pillow/Pillow2/issues/291
            """

        img = hopper()

        # Behaviour change: re #1416
        # Pre ifd rewrite, ImageJMetaData was being written as a string(2),
        # Post ifd rewrite, it's defined as arbitrary bytes(7). It should
        # roundtrip with the actual bytes, rather than stripped text
        # of the premerge tests.
        #
        # For text items, we still have to decode('ascii','replace') because
        # the tiff file format can't take 8 bit bytes in that field.

        basetextdata = "This is some arbitrary metadata for a text field"
        bindata = basetextdata.encode('ascii') + b" \xff"
        textdata = basetextdata + " " + chr(255)
        reloaded_textdata = basetextdata + " ?"
        floatdata = 12.345
        doubledata = 67.89
        info = TiffImagePlugin.ImageFileDirectory()

        ImageJMetaData = tag_ids['ImageJMetaData']
        ImageJMetaDataByteCounts = tag_ids['ImageJMetaDataByteCounts']
        ImageDescription = tag_ids['ImageDescription']

        info[ImageJMetaDataByteCounts] = len(bindata)
        info[ImageJMetaData] = bindata
        info[tag_ids['RollAngle']] = floatdata
        info.tagtype[tag_ids['RollAngle']] = 11
        info[tag_ids['YawAngle']] = doubledata
        info.tagtype[tag_ids['YawAngle']] = 12

        info[ImageDescription] = textdata

        f = self.tempfile("temp.tif")

        img.save(f, tiffinfo=info)

        loaded = Image.open(f)

        self.assertEqual(loaded.tag[ImageJMetaDataByteCounts],
                         (len(bindata), ))
        self.assertEqual(loaded.tag_v2[ImageJMetaDataByteCounts],
                         (len(bindata), ))

        self.assertEqual(loaded.tag[ImageJMetaData], bindata)
        self.assertEqual(loaded.tag_v2[ImageJMetaData], bindata)

        self.assertEqual(loaded.tag[ImageDescription], (reloaded_textdata, ))
        self.assertEqual(loaded.tag_v2[ImageDescription], reloaded_textdata)

        loaded_float = loaded.tag[tag_ids['RollAngle']][0]
        self.assertAlmostEqual(loaded_float, floatdata, places=5)
        loaded_double = loaded.tag[tag_ids['YawAngle']][0]
        self.assertAlmostEqual(loaded_double, doubledata)

        # check with 2 element ImageJMetaDataByteCounts, issue #2006

        info[ImageJMetaDataByteCounts] = (8, len(bindata) - 8)
        img.save(f, tiffinfo=info)
        loaded = Image.open(f)

        self.assertEqual(loaded.tag[ImageJMetaDataByteCounts],
                         (8, len(bindata) - 8))
        self.assertEqual(loaded.tag_v2[ImageJMetaDataByteCounts],
                         (8, len(bindata) - 8))