@@ -1194,8 +1194,8 @@ def seek(self, frame: int) -> None:
11941194 # Create a new core image object on second and
11951195 # subsequent frames in the image. Image may be
11961196 # different size/mode.
1197- Image ._decompression_bomb_check (self .size )
1198- self .im = Image .core .new (self .mode , self .size )
1197+ Image ._decompression_bomb_check (self ._tile_size )
1198+ self .im = Image .core .new (self .mode , self ._tile_size )
11991199
12001200 def _seek (self , frame : int ) -> None :
12011201 self .fp = self ._fp
@@ -1275,6 +1275,11 @@ def load(self) -> Image.core.PixelAccess | None:
12751275 return self ._load_libtiff ()
12761276 return super ().load ()
12771277
1278+ def load_prepare (self ) -> None :
1279+ if self ._im is None :
1280+ self .im = Image .core .new (self .mode , self ._tile_size )
1281+ ImageFile .ImageFile .load_prepare (self )
1282+
12781283 def load_end (self ) -> None :
12791284 # allow closing if we're on the first frame, there's no next
12801285 # This is the ImageFile.load path only, libtiff specific below.
@@ -1416,7 +1421,12 @@ def _setup(self) -> None:
14161421 if not isinstance (xsize , int ) or not isinstance (ysize , int ):
14171422 msg = "Invalid dimensions"
14181423 raise ValueError (msg )
1419- self ._size = xsize , ysize
1424+ self ._tile_size = xsize , ysize
1425+ orientation = self .tag_v2 .get (ExifTags .Base .Orientation )
1426+ if orientation in (5 , 6 , 7 , 8 ):
1427+ self ._size = ysize , xsize
1428+ else :
1429+ self ._size = xsize , ysize
14201430
14211431 logger .debug ("- size: %s" , self .size )
14221432
@@ -1559,7 +1569,7 @@ def _setup(self) -> None:
15591569 if STRIPOFFSETS in self .tag_v2 :
15601570 offsets = self .tag_v2 [STRIPOFFSETS ]
15611571 h = self .tag_v2 .get (ROWSPERSTRIP , ysize )
1562- w = self . size [ 0 ]
1572+ w = xsize
15631573 else :
15641574 # tiled image
15651575 offsets = self .tag_v2 [TILEOFFSETS ]
@@ -1593,9 +1603,9 @@ def _setup(self) -> None:
15931603 )
15941604 )
15951605 x = x + w
1596- if x >= self . size [ 0 ] :
1606+ if x >= xsize :
15971607 x , y = 0 , y + h
1598- if y >= self . size [ 1 ] :
1608+ if y >= ysize :
15991609 x = y = 0
16001610 layer += 1
16011611 else :
0 commit comments