def test_write_metadata(self): """ Test metadata writing through the python code """ img = Image.open("Tests/images/hopper.tif") f = self.tempfile("temp.tiff") img.save(f, tiffinfo=img.tag) with Image.open(f) as loaded: original = img.tag_v2.named() reloaded = loaded.tag_v2.named() for k, v in original.items(): if isinstance(v, IFDRational): original[k] = IFDRational(*_limit_rational(v, 2**31)) elif isinstance(v, tuple) and isinstance(v[0], IFDRational): original[k] = tuple( IFDRational(*_limit_rational(elt, 2**31)) for elt in v) ignored = [ "StripByteCounts", "RowsPerStrip", "PageNumber", "StripOffsets" ] for tag, value in reloaded.items(): if tag in ignored: continue if isinstance(original[tag], tuple) and isinstance( original[tag][0], IFDRational): # Need to compare element by element in the tuple, # not comparing tuples of object references self.assert_deep_equal( original[tag], value, "{} didn't roundtrip, {}, {}".format( tag, original[tag], value), ) else: self.assertEqual( original[tag], value, "{} didn't roundtrip, {}, {}".format( tag, original[tag], value), ) for tag, value in original.items(): if tag not in ignored: self.assertEqual(value, reloaded[tag], "%s didn't roundtrip" % tag)
def test_write_metadata(self): """ Test metadata writing through the python code """ img = Image.open('Tests/images/hopper.tif') f = self.tempfile('temp.tiff') img.save(f, tiffinfo=img.tag) loaded = Image.open(f) original = img.tag_v2.named() reloaded = loaded.tag_v2.named() for k, v in original.items(): if type(v) == IFDRational: original[k] = IFDRational(*_limit_rational(v, 2**31)) if type(v) == tuple and \ type(v[0]) == IFDRational: original[k] = tuple([IFDRational( *_limit_rational(elt, 2**31)) for elt in v]) ignored = ['StripByteCounts', 'RowsPerStrip', 'PageNumber', 'StripOffsets'] for tag, value in reloaded.items(): if tag in ignored: continue if (type(original[tag]) == tuple and type(original[tag][0]) == IFDRational): # Need to compare element by element in the tuple, # not comparing tuples of object references self.assert_deep_equal(original[tag], value, "%s didn't roundtrip, %s, %s" % (tag, original[tag], value)) else: self.assertEqual(original[tag], value, "%s didn't roundtrip, %s, %s" % (tag, original[tag], value)) for tag, value in original.items(): if tag not in ignored: self.assertEqual( value, reloaded[tag], "%s didn't roundtrip" % tag)
def test__limit_rational_float(self): from PIL.TiffImagePlugin import _limit_rational value = 22.3 ret = _limit_rational(value, 65536) self.assertEqual(ret, (223, 10))
def test__limit_rational_int(self): from PIL.TiffImagePlugin import _limit_rational value = 34 ret = _limit_rational(value, 65536) self.assertEqual(ret, (34, 1))