44from unittest import TestCase
55
66
7- def create_animated_image (mode = 'RGB' , format = "gif" , size = (1000 , 1000 ), no_frames = 6 ):
7+ def create_animated_image (mode = 'RGB' , format = "gif" , size = (1000 , 1000 ), no_frames = 6 , loop = None ):
88 frames = []
99 for i in range (no_frames ):
1010 image = Image .new (mode , size , (255 , 255 , 255 ))
@@ -14,9 +14,10 @@ def create_animated_image(mode='RGB', format="gif", size=(1000, 1000), no_frames
1414 draw .rectangle ((x_bit * 2 , y_bit , x_bit * 3 , y_bit * 8 ), 'yellow' )
1515 frames .append (image )
1616 write_to = BytesIO ()
17- frames [0 ].save (
18- write_to , format = format , save_all = True , append_images = frames [1 :]
19- )
17+ save_kwargs = {'format' : format , 'save_all' : True , 'append_images' : frames [1 :]}
18+ if loop is not None :
19+ save_kwargs ['loop' ] = loop
20+ frames [0 ].save (write_to , ** save_kwargs )
2021 im = Image .open (write_to )
2122 # for debugging
2223 # with open(f"animated{no_frames}.{format}", "wb") as f:
@@ -81,3 +82,17 @@ def test_background(self):
8182 # indeed processed?
8283 self .assertEqual (frames_count , processed_frames_count )
8384 self .assertEqual (processed .size , (1000 , 1800 ))
85+
86+ def test_background_loop_preserved (self ):
87+ no_frames = 5
88+ loop_value = 3
89+ im = create_animated_image (format = "gif" , no_frames = no_frames , loop = loop_value )
90+
91+ original_loop = im .info .get ('loop' , 0 )
92+ self .assertEqual (original_loop , loop_value )
93+
94+ processed = processors .background (im , background = "#00ff00" , size = (1200 , 1200 ))
95+
96+ processed_loop = processed .info .get ('loop' , 0 )
97+ self .assertEqual (processed_loop , original_loop )
98+ self .assertEqual (processed_loop , loop_value )
0 commit comments