mirror of
https://github.com/python-pillow/Pillow.git
synced 2024-11-14 05:36:48 +03:00
Added ImageSequence all_frames
This commit is contained in:
parent
32d10505a3
commit
db4916849e
|
@ -74,3 +74,25 @@ class TestImageSequence(PillowTestCase):
|
||||||
im.seek(0)
|
im.seek(0)
|
||||||
color2 = im.getpalette()[0:3]
|
color2 = im.getpalette()[0:3]
|
||||||
self.assertEqual(color1, color2)
|
self.assertEqual(color1, color2)
|
||||||
|
|
||||||
|
def test_all_frames(self):
|
||||||
|
# Test a single image
|
||||||
|
im = Image.open("Tests/images/iss634.gif")
|
||||||
|
ims = ImageSequence.all_frames(im)
|
||||||
|
|
||||||
|
self.assertEqual(len(ims), 42)
|
||||||
|
for i, im_frame in enumerate(ims):
|
||||||
|
self.assertFalse(im_frame is im)
|
||||||
|
|
||||||
|
im.seek(i)
|
||||||
|
self.assert_image_equal(im, im_frame)
|
||||||
|
|
||||||
|
# Test a series of images
|
||||||
|
ims = ImageSequence.all_frames([im, hopper(), im])
|
||||||
|
self.assertEqual(len(ims), 85)
|
||||||
|
|
||||||
|
# Test an operation
|
||||||
|
ims = ImageSequence.all_frames(im, lambda im_frame: im_frame.rotate(90))
|
||||||
|
for i, im_frame in enumerate(ims):
|
||||||
|
im.seek(i)
|
||||||
|
self.assert_image_equal(im.rotate(90), im_frame)
|
||||||
|
|
|
@ -54,3 +54,25 @@ class Iterator(object):
|
||||||
|
|
||||||
def next(self):
|
def next(self):
|
||||||
return self.__next__()
|
return self.__next__()
|
||||||
|
|
||||||
|
|
||||||
|
def all_frames(im, func=None):
|
||||||
|
"""
|
||||||
|
Applies a given function to all frames in an image or a list of images.
|
||||||
|
The frames are returned as a list of separate images.
|
||||||
|
|
||||||
|
:param im: An image, or a list of images.
|
||||||
|
:param func: The function to apply to all of the image frames.
|
||||||
|
:returns: A list of images.
|
||||||
|
"""
|
||||||
|
if not isinstance(im, list):
|
||||||
|
im = [im]
|
||||||
|
|
||||||
|
ims = []
|
||||||
|
for imSequence in im:
|
||||||
|
current = imSequence.tell()
|
||||||
|
|
||||||
|
ims += [im_frame.copy() for im_frame in Iterator(imSequence)]
|
||||||
|
|
||||||
|
imSequence.seek(current)
|
||||||
|
return [func(im) for im in ims] if func else ims
|
||||||
|
|
Loading…
Reference in New Issue
Block a user