diff --git a/docs/reference/plugins.rst b/docs/reference/plugins.rst index 243d4f353f5..a34f813c1a1 100644 --- a/docs/reference/plugins.rst +++ b/docs/reference/plugins.rst @@ -276,6 +276,11 @@ Plugin reference :undoc-members: :show-inheritance: +.. autoclass:: PIL.PsdImagePlugin._Layer() + :member-order: bysource + :members: + :show-inheritance: + :mod:`~PIL.SgiImagePlugin` module --------------------------------- diff --git a/src/PIL/PsdImagePlugin.py b/src/PIL/PsdImagePlugin.py index e39843e9dc8..c33165980b7 100644 --- a/src/PIL/PsdImagePlugin.py +++ b/src/PIL/PsdImagePlugin.py @@ -21,6 +21,7 @@ import io from functools import cached_property +from typing import NamedTuple from . import Image, ImageFile, ImagePalette from ._binary import i8 @@ -48,6 +49,13 @@ } +class _Layer(NamedTuple): + name: str + mode: str + box: tuple[int, int, int, int] + tile: list[ImageFile._Tile] + + # --------------------------------------------------------------------. # read PSD images @@ -150,9 +158,7 @@ def _open(self) -> None: self._min_frame = 1 @cached_property - def layers( - self, - ) -> list[tuple[str, str, tuple[int, int, int, int], list[ImageFile._Tile]]]: + def layers(self) -> list[_Layer]: layers = [] if self._layers_position is not None: if isinstance(self._fp, DeferredError): @@ -192,9 +198,7 @@ def tell(self) -> int: return self.frame -def _layerinfo( - fp: IO[bytes], ct_bytes: int -) -> list[tuple[str, str, tuple[int, int, int, int], list[ImageFile._Tile]]]: +def _layerinfo(fp: IO[bytes], ct_bytes: int) -> list[_Layer]: # read layerinfo block layers = [] @@ -280,7 +284,7 @@ def read(size: int) -> bytes: t = _maketile(fp, m, bbox, 1) if t: tile.extend(t) - layerinfo.append((name, mode, bbox, tile)) + layerinfo.append(_Layer(name, mode, bbox, tile)) return layerinfo @@ -306,7 +310,7 @@ def _maketile( if mode == "CMYK": layer += ";I" tiles.append(ImageFile._Tile("raw", bbox, offset, layer)) - offset = offset + xsize * ysize + offset += xsize * ysize elif compression == 1: # @@ -320,7 +324,7 @@ def _maketile( layer += ";I" tiles.append(ImageFile._Tile("packbits", bbox, offset, layer)) for y in range(ysize): - offset = offset + i16(bytecount, i) + offset += i16(bytecount, i) i += 2 file.seek(offset)