mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-08-08 14:24:46 +03:00
Merge 94028f01d4
into db223a7ff5
This commit is contained in:
commit
1547df7f7f
|
@ -144,68 +144,69 @@ OPEN_INFO = {
|
|||
# (ByteOrder, PhotoInterpretation, SampleFormat, FillOrder, BitsPerSample,
|
||||
# ExtraSamples) => mode, rawmode
|
||||
(II, 0, 1, 1, (1,), ()): ("1", "1;I"),
|
||||
(II, 0, 1, 2, (1,), ()): ("1", "1;IR"),
|
||||
(II, 0, 1, 1, (8,), ()): ("L", "L;I"),
|
||||
(II, 0, 1, 2, (1,), ()): ("1", "1;IR"),
|
||||
(II, 0, 1, 2, (8,), ()): ("L", "L;IR"),
|
||||
(II, 0, 3, 1, (32,), ()): ("F", "F;32F"),
|
||||
(II, 1, 1, 1, (1,), ()): ("1", "1"),
|
||||
(II, 1, 1, 2, (1,), ()): ("1", "1;R"),
|
||||
(II, 1, 1, 1, (8,), ()): ("L", "L"),
|
||||
(II, 1, 1, 1, (8, 8), (2,)): ("LA", "LA"),
|
||||
(II, 1, 1, 2, (8,), ()): ("L", "L;R"),
|
||||
(II, 1, 1, 1, (12,), ()): ("I;16", "I;12"),
|
||||
(II, 1, 1, 1, (16,), ()): ("I;16", "I;16"),
|
||||
(II, 1, 2, 1, (16,), ()): ("I;16S", "I;16S"),
|
||||
(II, 1, 1, 1, (32,), ()): ("I", "I;32N"),
|
||||
(II, 1, 1, 1, (8, 8), (2,)): ("LA", "LA"),
|
||||
(II, 1, 1, 1, (8,), ()): ("L", "L"),
|
||||
(II, 1, 1, 2, (1,), ()): ("1", "1;R"),
|
||||
(II, 1, 1, 2, (8,), ()): ("L", "L;R"),
|
||||
(II, 1, 2, 1, (16,), ()): ("I;16S", "I;16S"),
|
||||
(II, 1, 2, 1, (32,), ()): ("I", "I;32S"),
|
||||
(II, 1, 3, 1, (32,), ()): ("F", "F;32F"),
|
||||
(II, 2, 1, 1, (8, 8, 8), ()): ("RGB", "RGB"),
|
||||
(II, 2, 1, 2, (8, 8, 8), ()): ("RGB", "RGB;R"),
|
||||
(II, 2, 1, 1, (8, 8, 8, 8), ()): ("RGBA", "RGBA"), # missing ExtraSamples
|
||||
(II, 2, 1, 1, (8, 8, 8, 8), (0,)): ("RGBX", "RGBX"),
|
||||
(II, 2, 1, 1, (8, 8, 8, 8), (1,)): ("RGBA", "RGBa"),
|
||||
(II, 2, 1, 1, (8, 8, 8, 8), (2,)): ("RGBA", "RGBA"),
|
||||
(II, 2, 1, 1, (8, 8, 8, 8), (999,)): ("RGBA", "RGBA"), # Corel Draw 10
|
||||
(II, 2, 1, 2, (8, 8, 8), ()): ("RGB", "RGB;R"),
|
||||
(II, 3, 1, 1, (1,), ()): ("P", "P;1"),
|
||||
(II, 3, 1, 2, (1,), ()): ("P", "P;1R"),
|
||||
(II, 3, 1, 1, (2,), ()): ("P", "P;2"),
|
||||
(II, 3, 1, 2, (2,), ()): ("P", "P;2R"),
|
||||
(II, 3, 1, 1, (4,), ()): ("P", "P;4"),
|
||||
(II, 3, 1, 2, (4,), ()): ("P", "P;4R"),
|
||||
(II, 3, 1, 1, (8,), ()): ("P", "P"),
|
||||
(II, 3, 1, 1, (8, 8), (2,)): ("PA", "PA"),
|
||||
(II, 3, 1, 1, (8,), ()): ("P", "P"),
|
||||
(II, 3, 1, 2, (1,), ()): ("P", "P;1R"),
|
||||
(II, 3, 1, 2, (2,), ()): ("P", "P;2R"),
|
||||
(II, 3, 1, 2, (4,), ()): ("P", "P;4R"),
|
||||
(II, 3, 1, 2, (8,), ()): ("P", "P;R"),
|
||||
(II, 5, 1, 1, (8, 8, 8, 8), ()): ("CMYK", "CMYK"),
|
||||
(II, 6, 1, 1, (8, 8, 8), ()): ("YCbCr", "YCbCr"),
|
||||
(II, 8, 1, 1, (8, 8, 8), ()): ("LAB", "LAB"),
|
||||
|
||||
(MM, 0, 1, 1, (1,), ()): ("1", "1;I"),
|
||||
(MM, 0, 1, 2, (1,), ()): ("1", "1;IR"),
|
||||
(MM, 0, 1, 1, (8,), ()): ("L", "L;I"),
|
||||
(MM, 0, 1, 2, (1,), ()): ("1", "1;IR"),
|
||||
(MM, 0, 1, 2, (8,), ()): ("L", "L;IR"),
|
||||
(MM, 1, 1, 1, (1,), ()): ("1", "1"),
|
||||
(MM, 1, 1, 2, (1,), ()): ("1", "1;R"),
|
||||
(MM, 1, 1, 1, (8,), ()): ("L", "L"),
|
||||
(MM, 1, 1, 1, (8, 8), (2,)): ("LA", "LA"),
|
||||
(MM, 1, 1, 2, (8,), ()): ("L", "L;R"),
|
||||
(MM, 1, 1, 1, (16,), ()): ("I;16B", "I;16B"),
|
||||
(MM, 1, 1, 1, (4,), ()): ("L", "L;4"),
|
||||
(MM, 1, 1, 1, (8, 8), (2,)): ("LA", "LA"),
|
||||
(MM, 1, 1, 1, (8,), ()): ("L", "L"),
|
||||
(MM, 1, 1, 2, (1,), ()): ("1", "1;R"),
|
||||
(MM, 1, 1, 2, (8,), ()): ("L", "L;R"),
|
||||
(MM, 1, 2, 1, (16,), ()): ("I;16BS", "I;16BS"),
|
||||
(MM, 1, 2, 1, (32,), ()): ("I;32BS", "I;32BS"),
|
||||
(MM, 1, 3, 1, (32,), ()): ("F", "F;32BF"),
|
||||
(MM, 2, 1, 1, (8, 8, 8), ()): ("RGB", "RGB"),
|
||||
(MM, 2, 1, 2, (8, 8, 8), ()): ("RGB", "RGB;R"),
|
||||
(MM, 2, 1, 1, (8, 8, 8, 8), (0,)): ("RGBX", "RGBX"),
|
||||
(MM, 2, 1, 1, (8, 8, 8, 8), (1,)): ("RGBA", "RGBa"),
|
||||
(MM, 2, 1, 1, (8, 8, 8, 8), (2,)): ("RGBA", "RGBA"),
|
||||
(MM, 2, 1, 1, (8, 8, 8, 8), (999,)): ("RGBA", "RGBA"), # Corel Draw 10
|
||||
(MM, 2, 1, 2, (8, 8, 8), ()): ("RGB", "RGB;R"),
|
||||
(MM, 3, 1, 1, (1,), ()): ("P", "P;1"),
|
||||
(MM, 3, 1, 2, (1,), ()): ("P", "P;1R"),
|
||||
(MM, 3, 1, 1, (2,), ()): ("P", "P;2"),
|
||||
(MM, 3, 1, 2, (2,), ()): ("P", "P;2R"),
|
||||
(MM, 3, 1, 1, (4,), ()): ("P", "P;4"),
|
||||
(MM, 3, 1, 2, (4,), ()): ("P", "P;4R"),
|
||||
(MM, 3, 1, 1, (8,), ()): ("P", "P"),
|
||||
(MM, 3, 1, 1, (8, 8), (2,)): ("PA", "PA"),
|
||||
(MM, 3, 1, 1, (8,), ()): ("P", "P"),
|
||||
(MM, 3, 1, 2, (1,), ()): ("P", "P;1R"),
|
||||
(MM, 3, 1, 2, (2,), ()): ("P", "P;2R"),
|
||||
(MM, 3, 1, 2, (4,), ()): ("P", "P;4R"),
|
||||
(MM, 3, 1, 2, (8,), ()): ("P", "P;R"),
|
||||
(MM, 5, 1, 1, (8, 8, 8, 8), ()): ("CMYK", "CMYK"),
|
||||
(MM, 6, 1, 1, (8, 8, 8), ()): ("YCbCr", "YCbCr"),
|
||||
|
@ -449,10 +450,10 @@ class ImageFileDirectory(collections.MutableMapping):
|
|||
if size > 4:
|
||||
here = fp.tell()
|
||||
if Image.DEBUG:
|
||||
print ("Tag Location: %s" %here)
|
||||
print("Tag Location: %s" % here)
|
||||
fp.seek(i32(ifd, 8))
|
||||
if Image.DEBUG:
|
||||
print ("Data Location: %s" %fp.tell())
|
||||
print("Data Location: %s" % fp.tell())
|
||||
data = ImageFile._safe_read(fp, size)
|
||||
fp.seek(here)
|
||||
else:
|
||||
|
@ -659,19 +660,19 @@ class TiffImageFile(ImageFile.ImageFile):
|
|||
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()))
|
||||
print("Seeking to frame %s, on frame %s, __next %s, location: %s" %
|
||||
(frame, self.__frame, self.__next, self.fp.tell()))
|
||||
# reset python3 buffered io handle in case fp
|
||||
# was passed to libtiff, invalidating the buffer
|
||||
self.fp.tell()
|
||||
self.fp.seek(self.__next)
|
||||
if Image.DEBUG:
|
||||
print("Loading tags, location: %s"%self.fp.tell())
|
||||
print("Loading tags, location: %s" % self.fp.tell())
|
||||
self.tag.load(self.fp)
|
||||
self.__next = self.tag.next
|
||||
self.__frame += 1
|
||||
self._setup()
|
||||
|
||||
|
||||
def _tell(self):
|
||||
return self.__frame
|
||||
|
||||
|
|
BIN
Tests/images/flower-minisblack-04.tif
Normal file
BIN
Tests/images/flower-minisblack-04.tif
Normal file
Binary file not shown.
|
@ -144,28 +144,27 @@ class TestFileTiff(PillowTestCase):
|
|||
def test_multipage(self):
|
||||
# issue #862
|
||||
im = Image.open('Tests/images/multipage.tiff')
|
||||
# file is a multipage tiff, 10x10 green, 10x10 red, 20x20 blue
|
||||
# file is a multipage tiff: 10x10 green, 10x10 red, 20x20 blue
|
||||
|
||||
im.seek(0)
|
||||
self.assertEqual(im.size, (10,10))
|
||||
self.assertEqual(im.convert('RGB').getpixel((0,0)), (0,128,0))
|
||||
self.assertEqual(im.size, (10, 10))
|
||||
self.assertEqual(im.convert('RGB').getpixel((0, 0)), (0, 128, 0))
|
||||
|
||||
im.seek(1)
|
||||
im.load()
|
||||
self.assertEqual(im.size, (10,10))
|
||||
self.assertEqual(im.convert('RGB').getpixel((0,0)), (255,0,0))
|
||||
self.assertEqual(im.size, (10, 10))
|
||||
self.assertEqual(im.convert('RGB').getpixel((0, 0)), (255, 0, 0))
|
||||
|
||||
im.seek(2)
|
||||
im.load()
|
||||
self.assertEqual(im.size, (20,20))
|
||||
self.assertEqual(im.convert('RGB').getpixel((0,0)), (0,0,255))
|
||||
self.assertEqual(im.size, (20, 20))
|
||||
self.assertEqual(im.convert('RGB').getpixel((0, 0)), (0, 0, 255))
|
||||
|
||||
def test_multipage_last_frame(self):
|
||||
im = Image.open('Tests/images/multipage-lastframe.tif')
|
||||
im.load()
|
||||
self.assertEqual(im.size, (20,20))
|
||||
self.assertEqual(im.convert('RGB').getpixel((0,0)), (0,0,255))
|
||||
|
||||
self.assertEqual(im.size, (20, 20))
|
||||
self.assertEqual(im.convert('RGB').getpixel((0, 0)), (0, 0, 255))
|
||||
|
||||
def test___str__(self):
|
||||
# Arrange
|
||||
|
@ -199,7 +198,6 @@ class TestFileTiff(PillowTestCase):
|
|||
|
||||
def test_load_byte(self):
|
||||
# Arrange
|
||||
from PIL import TiffImagePlugin
|
||||
ifd = TiffImagePlugin.ImageFileDirectory()
|
||||
data = b"abc"
|
||||
|
||||
|
@ -211,7 +209,6 @@ class TestFileTiff(PillowTestCase):
|
|||
|
||||
def test_load_string(self):
|
||||
# Arrange
|
||||
from PIL import TiffImagePlugin
|
||||
ifd = TiffImagePlugin.ImageFileDirectory()
|
||||
data = b"abc\0"
|
||||
|
||||
|
@ -223,7 +220,6 @@ class TestFileTiff(PillowTestCase):
|
|||
|
||||
def test_load_float(self):
|
||||
# Arrange
|
||||
from PIL import TiffImagePlugin
|
||||
ifd = TiffImagePlugin.ImageFileDirectory()
|
||||
data = b"abcdabcd"
|
||||
|
||||
|
@ -235,7 +231,6 @@ class TestFileTiff(PillowTestCase):
|
|||
|
||||
def test_load_double(self):
|
||||
# Arrange
|
||||
from PIL import TiffImagePlugin
|
||||
ifd = TiffImagePlugin.ImageFileDirectory()
|
||||
data = b"abcdefghabcdefgh"
|
||||
|
||||
|
@ -298,6 +293,17 @@ class TestFileTiff(PillowTestCase):
|
|||
# Assert
|
||||
self.assertEqual(ret, [0, 1])
|
||||
|
||||
def test_4bit(self):
|
||||
# Arrange
|
||||
test_file = "Tests/images/flower-minisblack-04.tif"
|
||||
|
||||
# Act
|
||||
im = Image.open(test_file)
|
||||
|
||||
# Assert
|
||||
self.assertEqual(im.size, (73, 43))
|
||||
self.assertEqual(im.mode, "L")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
|
Loading…
Reference in New Issue
Block a user