diff --git a/stubs/Pillow/PIL/ExifTags.pyi b/stubs/Pillow/PIL/ExifTags.pyi index ba948a15d..0ad93f535 100644 --- a/stubs/Pillow/PIL/ExifTags.pyi +++ b/stubs/Pillow/PIL/ExifTags.pyi @@ -1,4 +1,4 @@ -from typing import Any +from typing import Mapping -TAGS: Any -GPSTAGS: Any +TAGS: Mapping[int, str] +GPSTAGS: Mapping[int, str] diff --git a/stubs/Pillow/PIL/Image.pyi b/stubs/Pillow/PIL/Image.pyi index aff63603e..f5313db9c 100644 --- a/stubs/Pillow/PIL/Image.pyi +++ b/stubs/Pillow/PIL/Image.pyi @@ -1,7 +1,7 @@ from _typeshed import SupportsRead, SupportsWrite from collections.abc import Iterable, Iterator, MutableMapping from pathlib import Path -from typing import Any, Dict, Protocol, Tuple, Union +from typing import Any, Callable, Dict, Protocol, Sequence, SupportsBytes, Tuple, Union from typing_extensions import Literal from ._imaging import ( @@ -11,9 +11,13 @@ from ._imaging import ( HUFFMAN_ONLY as HUFFMAN_ONLY, RLE as RLE, ) +from .ImageFilter import Filter +from .ImagePalette import ImagePalette _Mode = Literal["1", "CMYK", "F", "HSV", "I", "L", "LAB", "P", "RGB", "RGBA", "RGBX", "YCbCr"] _Resample = Literal[0, 1, 2, 3, 4, 5] +_Size = Tuple[int, int] +_Box = Tuple[int, int, int, int] _ConversionMatrix = Union[ Tuple[float, float, float, float], Tuple[float, float, float, float, float, float, float, float, float, float, float, float], @@ -123,7 +127,7 @@ class Image: def tobytes(self, encoder_name: str = ..., *args) -> bytes: ... def tobitmap(self, name: str = ...) -> bytes: ... def frombytes(self, data: bytes, decoder_name: str = ..., *args) -> None: ... - def load(self): ... + def load(self) -> None: ... def verify(self) -> None: ... def convert( self, @@ -143,31 +147,29 @@ class Image: ) -> Image: ... def copy(self) -> Image: ... __copy__ = copy - def crop(self, box=...) -> Image: ... - def draft(self, mode, size) -> None: ... - def filter(self, filter): ... + def crop(self, box: _Box | None = ...) -> Image: ... + def draft(self, mode: str, size: _Size) -> None: ... + def filter(self, filter: Filter | Callable[[], Filter]) -> Image: ... def getbands(self) -> Tuple[str, ...]: ... def getbbox(self) -> tuple[int, int, int, int] | None: ... - def getcolors(self, maxcolors: int = ...): ... - def getdata(self, band=...): ... + def getcolors(self, maxcolors: int = ...) -> list[tuple[int, int]]: ... + def getdata(self, band: int | None = ...): ... def getextrema(self): ... def getexif(self) -> Exif: ... def getim(self): ... - def getpalette(self): ... - def getpixel(self, xy): ... - def getprojection(self): ... - def histogram(self, mask=..., extrema=...): ... - def entropy(self, mask=..., extrema=...): ... - def paste( - self, im: Image, box: tuple[float, float] | tuple[float, float, float, float] | None = ..., mask: Image | None = ... - ) -> None: ... + def getpalette(self) -> list[int] | None: ... + def getpixel(self, xy: tuple[int, int]): ... + def getprojection(self) -> tuple[list[int], list[int]]: ... + def histogram(self, mask: Image | None = ..., extrema: tuple[int, int] | tuple[float, float] | None = ...) -> list[int]: ... + def entropy(self, mask: Image | None = ..., extrema: tuple[int, int] | tuple[float, float] | None = ...) -> float: ... + def paste(self, im: Image, box: tuple[float, float] | _Box | None = ..., mask: Image | None = ...) -> None: ... def alpha_composite(self, im: Image, dest: tuple[int, int] = ..., source: tuple[int, int] = ...) -> None: ... - def point(self, lut, mode=...): ... - def putalpha(self, alpha): ... - def putdata(self, data, scale: float = ..., offset: float = ...): ... - def putpalette(self, data, rawmode=...): ... - def putpixel(self, xy, value): ... - def remap_palette(self, dest_map, source_palette=...): ... + def point(self, lut, mode: str | None = ...) -> Image: ... + def putalpha(self, alpha: Image | int) -> None: ... + def putdata(self, data: Sequence[int], scale: float = ..., offset: float = ...) -> None: ... + def putpalette(self, data: ImagePalette | bytes | Iterable[int] | SupportsBytes, rawmode: str | None = ...) -> None: ... + def putpixel(self, xy: tuple[int, int], value: _Color | list[float]) -> None: ... + def remap_palette(self, dest_map: Iterable[int], source_palette: Sequence[int] | None = ...) -> Image: ... def resize( self, size: tuple[int, int], @@ -175,7 +177,7 @@ class Image: box: tuple[float, float, float, float] | None = ..., reducing_gap: float | None = ..., ) -> Image: ... - def reduce(self, factor, box=...): ... + def reduce(self, factor: int | tuple[int, int] | list[int], box: _Box | None = ...) -> None: ... def rotate( self, angle: float, @@ -186,17 +188,23 @@ class Image: fillcolor: _Color | None = ..., ) -> Image: ... def save(self, fp: str | bytes | Path | _Writeable, format: str | None = ..., **params: Any) -> None: ... - def seek(self, frame): ... - def show(self, title=..., command=...): ... - def split(self): ... - def getchannel(self, channel): ... + def seek(self, frame: int) -> None: ... + def show(self, title: str | None = ..., command: str | None = ...) -> None: ... + def split(self) -> Tuple[Image, ...]: ... + def getchannel(self, channel: int | str) -> Image: ... def tell(self) -> int: ... def thumbnail(self, size: tuple[int, int], resample: _Resample = ..., reducing_gap: float = ...) -> None: ... def transform( - self, size, method: Literal[0, 1, 2, 3, 4], data=..., resample: _Resample = ..., fill: int = ..., fillcolor=... + self, + size: _Size, + method: Literal[0, 1, 2, 3, 4], + data=..., + resample: _Resample = ..., + fill: int = ..., + fillcolor: _Color | int | None = ..., ) -> None: ... - def transpose(self, method: Literal[0, 1, 2, 3, 4, 5, 6]): ... - def effect_spread(self, distance): ... + def transpose(self, method: Literal[0, 1, 2, 3, 4, 5, 6]) -> Image: ... + def effect_spread(self, distance: int) -> Image: ... def toqimage(self): ... def toqpixmap(self): ... @@ -209,12 +217,14 @@ def frombuffer(mode: _Mode, size: tuple[int, int], data, decoder_name: str = ... def fromarray(obj, mode: _Mode | None = ...) -> Image: ... def fromqimage(im) -> Image: ... def fromqpixmap(im) -> Image: ... -def open(fp: str | bytes | Path | SupportsRead[bytes], mode: Literal["r"] = ..., formats=...) -> Image: ... +def open( + fp: str | bytes | Path | SupportsRead[bytes], mode: Literal["r"] = ..., formats: list[str] | tuple[str] | None = ... +) -> Image: ... def alpha_composite(im1: Image, im2: Image) -> Image: ... -def blend(im1: Image, im2: Image, alpha) -> Image: ... -def composite(image1: Image, image2: Image, mask) -> Image: ... -def eval(image: Image, *args): ... -def merge(mode, bands): ... +def blend(im1: Image, im2: Image, alpha: float) -> Image: ... +def composite(image1: Image, image2: Image, mask: Image) -> Image: ... +def eval(image: Image, *args) -> Image: ... +def merge(mode: str, bands: Sequence[Image]) -> Image: ... def register_open(id: str, factory, accept=...) -> None: ... def register_mime(id: str, mimetype: str) -> None: ... def register_save(id: str, driver) -> None: ... @@ -224,18 +234,18 @@ def register_extensions(id: str, extensions: Iterable[str]) -> None: ... def registered_extensions() -> dict[str, str]: ... def register_decoder(name: str, decoder) -> None: ... def register_encoder(name: str, encoder) -> None: ... -def effect_mandelbrot(size: tuple[int, int], extent, quality) -> Image: ... -def effect_noise(size: tuple[int, int], sigma) -> Image: ... -def linear_gradient(mode) -> Image: ... -def radial_gradient(mode) -> Image: ... +def effect_mandelbrot(size: tuple[int, int], extent: tuple[float, float, float, float], quality: int) -> Image: ... +def effect_noise(size: tuple[int, int], sigma: float) -> Image: ... +def linear_gradient(mode: str) -> Image: ... +def radial_gradient(mode: str) -> Image: ... class Exif(MutableMapping[int, Any]): def load(self, data: bytes) -> None: ... def tobytes(self, offset: int = ...) -> bytes: ... def get_ifd(self, tag: int): ... def __len__(self) -> int: ... - def __getitem__(self, tag: int): ... + def __getitem__(self, tag: int) -> Any: ... def __contains__(self, tag: object) -> bool: ... - def __setitem__(self, tag: int, value) -> None: ... + def __setitem__(self, tag: int, value: Any) -> None: ... def __delitem__(self, tag: int) -> None: ... def __iter__(self) -> Iterator[int]: ... diff --git a/stubs/Pillow/PIL/__init__.pyi b/stubs/Pillow/PIL/__init__.pyi index 73d7019df..8873f33c3 100644 --- a/stubs/Pillow/PIL/__init__.pyi +++ b/stubs/Pillow/PIL/__init__.pyi @@ -1,3 +1,3 @@ __version__: str -class UnidentifiedImageError(OSError): ... +class UnidentifiedImageError(IOError): ...