mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-10-31 07:57:27 +03:00 
			
		
		
		
	Use frame count from FLI header
This commit is contained in:
		
							parent
							
								
									5f5ac09158
								
							
						
					
					
						commit
						25e467a756
					
				|  | @ -49,6 +49,9 @@ class FliImageFile(ImageFile.ImageFile): | |||
|                 s[20:22] == b"\x00\x00"):  # reserved | ||||
|             raise SyntaxError("not an FLI/FLC file") | ||||
| 
 | ||||
|         # frames | ||||
|         self.__framecount = i16(s[6:8]) | ||||
| 
 | ||||
|         # image characteristics | ||||
|         self.mode = "P" | ||||
|         self.size = i16(s[8:10]), i16(s[10:12]) | ||||
|  | @ -86,8 +89,6 @@ class FliImageFile(ImageFile.ImageFile): | |||
|         self.__frame = -1 | ||||
|         self.__fp = self.fp | ||||
|         self.__rewind = self.fp.tell() | ||||
|         self._n_frames = None | ||||
|         self._is_animated = None | ||||
|         self.seek(0) | ||||
| 
 | ||||
|     def _palette(self, palette, shift): | ||||
|  | @ -110,43 +111,22 @@ class FliImageFile(ImageFile.ImageFile): | |||
| 
 | ||||
|     @property | ||||
|     def n_frames(self): | ||||
|         if self._n_frames is None: | ||||
|             current = self.tell() | ||||
|             try: | ||||
|                 while True: | ||||
|                     self.seek(self.tell() + 1) | ||||
|             except EOFError: | ||||
|                 self._n_frames = self.tell() + 1 | ||||
|             self.seek(current) | ||||
|         return self._n_frames | ||||
|         return self.__framecount | ||||
| 
 | ||||
|     @property | ||||
|     def is_animated(self): | ||||
|         if self._is_animated is None: | ||||
|             current = self.tell() | ||||
| 
 | ||||
|             try: | ||||
|                 self.seek(1) | ||||
|                 self._is_animated = True | ||||
|             except EOFError: | ||||
|                 self._is_animated = False | ||||
| 
 | ||||
|             self.seek(current) | ||||
|         return self._is_animated | ||||
|         return self.__framecount > 1 | ||||
| 
 | ||||
|     def seek(self, frame): | ||||
|         if frame == self.__frame: | ||||
|             return | ||||
|         if frame < self.__frame: | ||||
|             self._seek(0) | ||||
|         if frame >= self.__framecount: | ||||
|             raise EOFError("no more images in FLI file") | ||||
| 
 | ||||
|         last_frame = self.__frame | ||||
|         for f in range(self.__frame + 1, frame + 1): | ||||
|             try: | ||||
|                 self._seek(f) | ||||
|             except EOFError: | ||||
|                 self.seek(last_frame) | ||||
|                 raise EOFError("no more images in FLI file") | ||||
|             self._seek(f) | ||||
| 
 | ||||
|     def _seek(self, frame): | ||||
|         if frame == 0: | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user