mirror of
https://github.com/python-pillow/Pillow.git
synced 2024-11-10 19:56:47 +03:00
Added multiframe GIF test
This commit is contained in:
parent
53d0e75d3f
commit
4fbea3e553
|
@ -299,9 +299,22 @@ RAWMODE = {
|
|||
"P": "P",
|
||||
}
|
||||
|
||||
|
||||
def _convert_mode(im):
|
||||
# convert on the fly (EXPERIMENTAL -- I'm not sure PIL
|
||||
# should automatically convert images on save...)
|
||||
if Image.getmodebase(im.mode) == "RGB":
|
||||
palette_size = 256
|
||||
if im.palette:
|
||||
palette_size = len(im.palette.getdata()[1]) // 3
|
||||
return im.convert("P", palette=1, colors=palette_size)
|
||||
return im.convert("L")
|
||||
|
||||
|
||||
def _save_all(im, fp, filename):
|
||||
_save(im, fp, filename, save_all=True)
|
||||
|
||||
|
||||
def _save(im, fp, filename, save_all=False):
|
||||
|
||||
if _imaging_gif:
|
||||
|
@ -315,15 +328,7 @@ def _save(im, fp, filename, save_all=False):
|
|||
if im.mode in RAWMODE:
|
||||
im_out = im.copy()
|
||||
else:
|
||||
# convert on the fly (EXPERIMENTAL -- I'm not sure PIL
|
||||
# should automatically convert images on save...)
|
||||
if Image.getmodebase(im.mode) == "RGB":
|
||||
palette_size = 256
|
||||
if im.palette:
|
||||
palette_size = len(im.palette.getdata()[1]) // 3
|
||||
im_out = im.convert("P", palette=1, colors=palette_size)
|
||||
else:
|
||||
im_out = im.convert("L")
|
||||
im_out = _convert_mode(im)
|
||||
|
||||
# header
|
||||
try:
|
||||
|
@ -335,7 +340,9 @@ def _save(im, fp, filename, save_all=False):
|
|||
if save_all:
|
||||
previous = None
|
||||
|
||||
for im_frame in ImageSequence.Iterator(im_out):
|
||||
for im_frame in ImageSequence.Iterator(im):
|
||||
im_frame = _convert_mode(im_frame)
|
||||
|
||||
# To specify duration, add the time in milliseconds to getdata(),
|
||||
# e.g. getdata(im_frame, duration=1000)
|
||||
if not previous:
|
||||
|
|
|
@ -72,6 +72,7 @@ class TestFileGif(PillowTestCase):
|
|||
self.assert_image_similar(reread.convert('RGB'), hopper(), 50)
|
||||
|
||||
def test_roundtrip_save_all(self):
|
||||
# Single frame image
|
||||
out = self.tempfile('temp.gif')
|
||||
im = hopper()
|
||||
im.save(out, save_all=True)
|
||||
|
@ -79,6 +80,15 @@ class TestFileGif(PillowTestCase):
|
|||
|
||||
self.assert_image_similar(reread.convert('RGB'), im, 50)
|
||||
|
||||
# Multiframe image
|
||||
im = Image.open("Tests/images/dispose_bgnd.gif")
|
||||
|
||||
out = self.tempfile('temp.gif')
|
||||
im.save(out, save_all=True)
|
||||
reread = Image.open(out)
|
||||
|
||||
self.assertEqual(im.n_frames, 5)
|
||||
|
||||
def test_palette_handling(self):
|
||||
# see https://github.com/python-pillow/Pillow/issues/513
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user