Partial fix for test failures, works on py2.x

This commit is contained in:
wiredfool 2014-08-26 15:30:03 -07:00
parent 3df822d1ef
commit d8b2829f4b
3 changed files with 23 additions and 10 deletions

View File

@ -448,7 +448,11 @@ class ImageFileDirectory(collections.MutableMapping):
# Get and expand tag value
if size > 4:
here = fp.tell()
if Image.DEBUG:
print ("Tag Location: %s" %here)
fp.seek(i32(ifd, 8))
if Image.DEBUG:
print ("Data Location: %s" %fp.tell())
data = ImageFile._safe_read(fp, size)
fp.seek(here)
else:
@ -632,18 +636,20 @@ class TiffImageFile(ImageFile.ImageFile):
def seek(self, frame):
"Select a given frame as current image"
if frame < 0:
frame = 0
self._seek(frame)
# Create a new core image object on second and
# subsequent frames in the image. Image may be
# different size/mode.
Image._decompression_bomb_check(self.size)
self.im = Image.core.new(self.mode, self.size)
def tell(self):
"Return the current frame number"
return self._tell()
def _seek(self, frame):
self.fp = self.__fp
if frame < self.__frame:
# rewind file
@ -652,16 +658,18 @@ class TiffImageFile(ImageFile.ImageFile):
while self.__frame < frame:
if not self.__next:
raise EOFError("no more images in TIFF file")
if Image.DEBUG:
print("Seeking to frame %s, on frame %s, __next %s, location: %s"%
(frame, self.__frame, self.__next, self.fp.tell()))
self.fp.seek(self.__next)
if Image.DEBUG:
print("Loading tags, location: %s"%self.fp.tell())
self.tag.load(self.fp)
self.__next = self.tag.next
self.__frame += 1
self._setup()
#UNDONE - decompresion bomb
self.im = Image.core.new(self.mode, self.size)
def _tell(self):
return self.__frame
def _decoder(self, rawmode, layer, tile=None):

View File

@ -332,7 +332,7 @@ class TestFileLibTiff(LibTiffTestCase):
self.assertFalse(im.tag.next)
self.assertEqual(im.size, (20,20))
self.assertEqual(im.convert('RGB').getpixel((0,0)), (0,0,255))
TiffImagePlugin.READ_LIBTIFF = False
def test__next(self):

View File

@ -22,15 +22,19 @@ class TestImageSequence(PillowTestCase):
self.assertEqual(index, 1)
def _test_multipage_tiff(self):
def _test_multipage_tiff(self, dbg=False):
# debug had side effect of calling fp.tell.
Image.DEBUG=dbg
im = Image.open('Tests/images/multipage.tiff')
for index, frame in enumerate(ImageSequence.Iterator(im)):
frame.load()
self.assertEqual(index, im.tell())
frame.convert('RGB')
Image.DEBUG=False
def test_tiff(self):
return self._test_multipage_tiff()
#self._test_multipage_tiff(True)
self._test_multipage_tiff(False)
def test_libtiff(self):
codecs = dir(Image.core)
@ -39,7 +43,8 @@ class TestImageSequence(PillowTestCase):
self.skipTest("tiff support not available")
TiffImagePlugin.READ_LIBTIFF = True
self._test_multipage_tiff()
#self._test_multipage_tiff(True)
self._test_multipage_tiff(False)
TiffImagePlugin.READ_LIBTIFF = False
if __name__ == '__main__':