diff --git a/PIL/TiffImagePlugin.py b/PIL/TiffImagePlugin.py index 9bbcd03fe..689724574 100644 --- a/PIL/TiffImagePlugin.py +++ b/PIL/TiffImagePlugin.py @@ -974,6 +974,7 @@ class TiffImageFile(ImageFile.ImageFile): self.__frame += 1 self.fp.seek(self._frame_pos[frame]) self.tag_v2.load(self.fp) + self.__next = self.tag_v2.next # fill the legacy tag/ifd entries self.tag = self.ifd = ImageFileDirectory_v1.from_v2(self.tag_v2) self.__frame = frame diff --git a/Tests/images/compression2.tif b/Tests/images/compression2.tif new file mode 100644 index 000000000..108d7ec6a Binary files /dev/null and b/Tests/images/compression2.tif differ diff --git a/Tests/test_file_tiff.py b/Tests/test_file_tiff.py index 76fe8f930..5a79f95c8 100644 --- a/Tests/test_file_tiff.py +++ b/Tests/test_file_tiff.py @@ -444,11 +444,45 @@ class TestFileTiff(PillowTestCase): self.assertEqual(im.size, (10, 10)) im.load() + self.assertRaises(EOFError, lambda: im.seek(2)) + im.seek(0) self.assertEqual(im._compression, 'tiff_ccitt') self.assertEqual(im.size, (10, 10)) im.load() + im.seek(1) + self.assertEqual(im._compression, 'packbits') + self.assertEqual(im.size, (10, 10)) + im.load() + + im.seek(0) + self.assertEqual(im._compression, 'tiff_ccitt') + self.assertEqual(im.size, (10, 10)) + im.load() + + im2 = Image.open('Tests/images/compression2.tif') + + im2.seek(0) + self.assertEqual(im2._compression, 'packbits') + self.assertEqual(im2.size, (10, 10)) + im2.load() + + im2.seek(1) + self.assertEqual(im2._compression, 'tiff_ccitt') + self.assertEqual(im2.size, (10, 10)) + im2.load() + + im2.seek(0) + self.assertEqual(im2._compression, 'packbits') + self.assertEqual(im2.size, (10, 10)) + im2.load() + + im2.seek(1) + self.assertEqual(im2._compression, 'tiff_ccitt') + self.assertEqual(im2.size, (10, 10)) + im2.load() + def test_save_tiff_with_jpegtables(self): # Arrange outfile = self.tempfile("temp.tif")