@@ -985,7 +985,6 @@ def _open(self):
985985 self .__fp = self .fp
986986 self ._frame_pos = []
987987 self ._n_frames = None
988- self ._is_animated = None
989988
990989 if DEBUG :
991990 print ("*** TiffImageFile._open ***" )
@@ -999,29 +998,14 @@ def _open(self):
999998 def n_frames (self ):
1000999 if self ._n_frames is None :
10011000 current = self .tell ()
1002- try :
1003- while True :
1004- self ._seek (self .tell () + 1 )
1005- except EOFError :
1006- self ._n_frames = self .tell () + 1
1001+ self ._seek (len (self ._frame_pos ))
1002+ while self ._n_frames is None :
1003+ self ._seek (self .tell () + 1 )
10071004 self .seek (current )
10081005 return self ._n_frames
10091006
10101007 @property
10111008 def is_animated (self ):
1012- if self ._is_animated is None :
1013- if self ._n_frames is not None :
1014- self ._is_animated = self ._n_frames != 1
1015- else :
1016- current = self .tell ()
1017-
1018- try :
1019- self .seek (1 )
1020- self ._is_animated = True
1021- except EOFError :
1022- self ._is_animated = False
1023-
1024- self .seek (current )
10251009 return self ._is_animated
10261010
10271011 def seek (self , frame ):
@@ -1053,6 +1037,10 @@ def _seek(self, frame):
10531037 print ("Loading tags, location: %s" % self .fp .tell ())
10541038 self .tag_v2 .load (self .fp )
10551039 self .__next = self .tag_v2 .next
1040+ if self .__next == 0 :
1041+ self ._n_frames = frame + 1
1042+ if len (self ._frame_pos ) == 1 :
1043+ self ._is_animated = self .__next != 0
10561044 self .__frame += 1
10571045 self .fp .seek (self ._frame_pos [frame ])
10581046 self .tag_v2 .load (self .fp )
@@ -1086,7 +1074,7 @@ def load(self):
10861074 def load_end (self ):
10871075 # allow closing if we're on the first frame, there's no next
10881076 # This is the ImageFile.load path only, libtiff specific below.
1089- if len ( self . _frame_pos ) == 1 and not self .__next :
1077+ if not self ._is_animated :
10901078 self ._close_exclusive_fp_after_loading = True
10911079
10921080 def _load_libtiff (self ):
@@ -1166,10 +1154,9 @@ def _load_libtiff(self):
11661154 self .tile = []
11671155 self .readonly = 0
11681156 # libtiff closed the fp in a, we need to close self.fp, if possible
1169- if self ._exclusive_fp :
1170- if len (self ._frame_pos ) == 1 and not self .__next :
1171- self .fp .close ()
1172- self .fp = None # might be shared
1157+ if self ._exclusive_fp and not self ._is_animated :
1158+ self .fp .close ()
1159+ self .fp = None # might be shared
11731160
11741161 if err < 0 :
11751162 raise IOError (err )
0 commit comments