diff --git a/PIL/ImageFile.py b/PIL/ImageFile.py index cda64efcf..a66452478 100644 --- a/PIL/ImageFile.py +++ b/PIL/ImageFile.py @@ -170,6 +170,9 @@ class ImageFile(Image.Image): self.map, self.size, d, e, o, a ) readonly = 1 + # After trashing self.im, we might need to reload the palette data. + if self.palette: + self.palette.dirty = 1 except (AttributeError, EnvironmentError, ImportError): self.map = None diff --git a/Tests/images/multipage-mmap.tiff b/Tests/images/multipage-mmap.tiff new file mode 100644 index 000000000..162b0521b Binary files /dev/null and b/Tests/images/multipage-mmap.tiff differ diff --git a/Tests/test_imagesequence.py b/Tests/test_imagesequence.py index 8c65e6358..0877bfb8a 100644 --- a/Tests/test_imagesequence.py +++ b/Tests/test_imagesequence.py @@ -63,5 +63,14 @@ class TestImageSequence(PillowTestCase): self.assert_image_equal(frame, firstFrame) break + + def test_palette_mmap(self): + # Using mmap in ImageFile can require to reload the palette. + im = Image.open('Tests/images/multipage-mmap.tiff') + color1 = im.getpalette()[0:3] + im.seek(0) + color2 = im.getpalette()[0:3] + self.assertEqual(color1, color2) + if __name__ == '__main__': unittest.main()