@@ -97,7 +97,7 @@ def n_frames(self):
9797 current = self .tell ()
9898 try :
9999 while True :
100- self .seek (self .tell () + 1 )
100+ self ._seek (self .tell () + 1 , False )
101101 except EOFError :
102102 self ._n_frames = self .tell () + 1
103103 self .seek (current )
@@ -114,7 +114,7 @@ def is_animated(self):
114114 self ._is_animated = True
115115 else :
116116 try :
117- self .seek ( 1 )
117+ self ._seek ( 1 , False )
118118 self ._is_animated = True
119119 except EOFError :
120120 self ._is_animated = False
@@ -137,7 +137,7 @@ def seek(self, frame):
137137 self .seek (last_frame )
138138 raise EOFError ("no more images in GIF file" ) from e
139139
140- def _seek (self , frame ):
140+ def _seek (self , frame , update_image = True ):
141141
142142 if frame == 0 :
143143 # rewind
@@ -149,7 +149,7 @@ def _seek(self, frame):
149149 self .disposal_method = 0
150150 else :
151151 # ensure that the previous frame was loaded
152- if self .tile :
152+ if self .tile and update_image :
153153 self .load ()
154154
155155 if frame != self .__frame + 1 :
@@ -171,19 +171,20 @@ def _seek(self, frame):
171171
172172 self .tile = []
173173
174- if self .__frame == 1 :
175- self .pyaccess = None
176- if "transparency" in self .info :
177- self .mode = "RGBA"
178- self .im .putpalettealpha (self .info ["transparency" ], 0 )
179- self .im = self .im .convert ("RGBA" , Image .Dither .FLOYDSTEINBERG )
174+ if update_image :
175+ if self .__frame == 1 :
176+ self .pyaccess = None
177+ if "transparency" in self .info :
178+ self .mode = "RGBA"
179+ self .im .putpalettealpha (self .info ["transparency" ], 0 )
180+ self .im = self .im .convert ("RGBA" , Image .Dither .FLOYDSTEINBERG )
180181
181- del self .info ["transparency" ]
182- else :
183- self .mode = "RGB"
184- self .im = self .im .convert ("RGB" , Image .Dither .FLOYDSTEINBERG )
185- if self .dispose :
186- self .im .paste (self .dispose , self .dispose_extent )
182+ del self .info ["transparency" ]
183+ else :
184+ self .mode = "RGB"
185+ self .im = self .im .convert ("RGB" , Image .Dither .FLOYDSTEINBERG )
186+ if self .dispose :
187+ self .im .paste (self .dispose , self .dispose_extent )
187188
188189 palette = None
189190
@@ -275,6 +276,12 @@ def _seek(self, frame):
275276 # raise OSError, "illegal GIF tag `%x`" % s[0]
276277 s = None
277278
279+ if interlace is None :
280+ # self.__fp = None
281+ raise EOFError
282+ if not update_image :
283+ return
284+
278285 frame_palette = palette or self .global_palette
279286
280287 def _rgb (color ):
@@ -333,9 +340,6 @@ def _rgb(color):
333340 (bits , interlace ),
334341 )
335342 ]
336- else :
337- # self.__fp = None
338- raise EOFError
339343
340344 for k in ["duration" , "comment" , "extension" , "loop" ]:
341345 if k in info :
0 commit comments