1010from ._options import options
1111from .constants import HeifErrorCode
1212from .error import HeifError
13- from .heif import HeifFile , HeifImage , is_supported , open_heif
13+ from .heif import HeifFile , is_supported , open_heif
1414from .misc import getxmp , set_orientation
1515
1616
@@ -23,6 +23,7 @@ class HeifImageFile(ImageFile.ImageFile):
2323 _close_exclusive_fp_after_loading = False
2424
2525 def __init__ (self , * args , ** kwargs ):
26+ self .__frame = 0
2627 self .heif_file = None
2728 super ().__init__ (* args , ** kwargs )
2829
@@ -33,12 +34,12 @@ def _open(self):
3334 raise SyntaxError (str (exception )) from None
3435 self .custom_mimetype = heif_file .mimetype
3536 self .heif_file = heif_file
36- self ._init_from_heif_file (heif_file )
37+ self ._init_from_heif_file (self . __frame )
3738 self .tile = []
3839
3940 def load (self ):
4041 if self .heif_file :
41- frame_heif = self ._heif_image_by_index ( self .tell ())
42+ frame_heif = self .heif_file [ self .tell ()]
4243 self .load_prepare ()
4344 truncated = False
4445 try :
@@ -69,16 +70,11 @@ def getxmp(self) -> dict:
6970 def seek (self , frame ):
7071 if not self ._seek_check (frame ):
7172 return
72- self ._init_from_heif_file (self ._heif_image_by_index (frame ))
73+ self .__frame = frame
74+ self ._init_from_heif_file (frame )
7375
7476 def tell (self ):
75- i = 0
76- if self .heif_file :
77- for heif in self .heif_file :
78- if self .info ["img_id" ] == heif .info ["img_id" ]:
79- break
80- i += 1
81- return i
77+ return self .__frame
8278
8379 def verify (self ) -> None :
8480 for _ in self .info ["thumbnails" ]:
@@ -103,18 +99,11 @@ def _seek_check(self, frame):
10399 raise EOFError ("attempt to seek outside sequence" )
104100 return self .tell () != frame
105101
106- def _heif_image_by_index (self , index ) -> HeifImage :
107- return self .heif_file [index ]
108-
109- def _init_from_heif_file (self , heif_image ) -> None :
110- self ._size = heif_image .size
111- self .mode = heif_image .mode
112- for k in ("exif" , "xmp" , "metadata" , "primary" , "img_id" ):
113- self .info [k ] = heif_image .info [k ]
114- for k in ("icc_profile" , "icc_profile_type" , "nclx_profile" ):
115- if k in heif_image .info :
116- self .info [k ] = heif_image .info [k ]
117- self .info ["thumbnails" ] = heif_image .thumbnails
102+ def _init_from_heif_file (self , img_index : int ) -> None :
103+ self ._size = self .heif_file [img_index ].size
104+ self .mode = self .heif_file [img_index ].mode
105+ self .info = self .heif_file [img_index ].info
106+ self .info ["thumbnails" ] = self .heif_file [img_index ].thumbnails
118107 self .info ["original_orientation" ] = set_orientation (self .info )
119108
120109
0 commit comments