1 from _typeshed import SupportsRead, SupportsWrite
2 from collections.abc import Iterable, Iterator, MutableMapping
3 from pathlib import Path
4 from typing import Any, Callable, Dict, Protocol, Sequence, SupportsBytes, Tuple, Union
5 from typing_extensions import Literal
7 from ._imaging import (
8 DEFAULT_STRATEGY as DEFAULT_STRATEGY,
11 HUFFMAN_ONLY as HUFFMAN_ONLY,
14 from .ImageFilter import Filter
15 from .ImagePalette import ImagePalette
17 _Mode = Literal["1", "CMYK", "F", "HSV", "I", "L", "LAB", "P", "RGB", "RGBA", "RGBX", "YCbCr"]
18 _Resample = Literal[0, 1, 2, 3, 4, 5]
19 _Size = Tuple[int, int]
20 _Box = Tuple[int, int, int, int]
22 _ConversionMatrix = Union[
23 Tuple[float, float, float, float], Tuple[float, float, float, float, float, float, float, float, float, float, float, float],
25 _Color = Union[float, Tuple[float, ...]]
27 class _Writeable(SupportsWrite[bytes], Protocol):
28 def seek(self, __offset: int) -> Any: ...
35 class DecompressionBombWarning(RuntimeWarning): ...
36 class DecompressionBombError(Exception): ...
42 FLIP_LEFT_RIGHT: Literal[0]
43 FLIP_TOP_BOTTOM: Literal[1]
45 ROTATE_180: Literal[3]
46 ROTATE_270: Literal[4]
48 TRANSVERSE: Literal[6]
52 PERSPECTIVE: Literal[2]
68 FLOYDSTEINBERG: Literal[3]
74 MAXCOVERAGE: Literal[1]
75 FASTOCTREE: Literal[2]
76 LIBIMAGEQUANT: Literal[3]
82 SAVE_ALL: dict[str, Any]
83 EXTENSION: dict[str, str]
84 DECODERS: dict[str, Any]
85 ENCODERS: dict[str, Any]
89 def getmodebase(mode: _Mode) -> Literal["L", "RGB"]: ...
90 def getmodetype(mode: _Mode) -> Literal["L", "I", "F"]: ...
91 def getmodebandnames(mode: _Mode) -> Tuple[str, ...]: ...
92 def getmodebands(mode: _Mode) -> int: ...
93 def preinit() -> None: ...
94 def init() -> None: ...
95 def coerce_e(value) -> _E: ...
98 def __init__(self, data) -> None: ...
99 def __add__(self, other) -> _E: ...
100 def __mul__(self, other) -> _E: ...
102 _ImageState = Tuple[Dict[str, Any], str, Tuple[int, int], Any, bytes]
106 format_description: Any
114 def width(self) -> int: ...
116 def height(self) -> int: ...
118 def size(self) -> tuple[int, int]: ...
119 def __enter__(self) -> Image: ...
120 def __exit__(self, *args: Any) -> None: ...
121 def close(self) -> None: ...
122 def __eq__(self, other: object) -> bool: ...
123 def __array__(self, dtype=...) -> Any: ... # returns numpy.array()
124 def __getstate__(self) -> _ImageState: ...
125 def __setstate__(self, state: _ImageState) -> None: ...
126 def tobytes(self, encoder_name: str = ..., *args) -> bytes: ...
127 def tobitmap(self, name: str = ...) -> bytes: ...
128 def frombytes(self, data: bytes, decoder_name: str = ..., *args) -> None: ...
129 def load(self) -> None: ...
130 def verify(self) -> None: ...
133 mode: str | None = ...,
134 matrix: _ConversionMatrix | None = ...,
135 dither: int | None = ...,
136 palette: Literal[0, 1] = ...,
142 method: Literal[0, 1, 2, 3] | None = ...,
144 palette: Image | None = ...,
147 def copy(self) -> Image: ...
149 def crop(self, box: _Box | None = ...) -> Image: ...
150 def draft(self, mode: str, size: _Size) -> None: ...
151 def filter(self, filter: Filter | Callable[[], Filter]) -> Image: ...
152 def getbands(self) -> Tuple[str, ...]: ...
153 def getbbox(self) -> tuple[int, int, int, int] | None: ...
154 def getcolors(self, maxcolors: int = ...) -> list[tuple[int, int]]: ...
155 def getdata(self, band: int | None = ...): ...
156 def getextrema(self): ...
157 def getexif(self) -> Exif: ...
159 def getpalette(self) -> list[int] | None: ...
160 def getpixel(self, xy: tuple[int, int]): ...
161 def getprojection(self) -> tuple[list[int], list[int]]: ...
162 def histogram(self, mask: Image | None = ..., extrema: tuple[int, int] | tuple[float, float] | None = ...) -> list[int]: ...
163 def entropy(self, mask: Image | None = ..., extrema: tuple[int, int] | tuple[float, float] | None = ...) -> float: ...
164 def paste(self, im: Image, box: tuple[float, float] | _Box | None = ..., mask: Image | None = ...) -> None: ...
165 def alpha_composite(self, im: Image, dest: tuple[int, int] = ..., source: tuple[int, int] = ...) -> None: ...
166 def point(self, lut, mode: str | None = ...) -> Image: ...
167 def putalpha(self, alpha: Image | int) -> None: ...
168 def putdata(self, data: Sequence[int], scale: float = ..., offset: float = ...) -> None: ...
169 def putpalette(self, data: ImagePalette | bytes | Iterable[int] | SupportsBytes, rawmode: str | None = ...) -> None: ...
170 def putpixel(self, xy: tuple[int, int], value: _Color | list[float]) -> None: ...
171 def remap_palette(self, dest_map: Iterable[int], source_palette: Sequence[int] | None = ...) -> Image: ...
174 size: tuple[int, int],
175 resample: _Resample | None = ...,
176 box: tuple[float, float, float, float] | None = ...,
177 reducing_gap: float | None = ...,
179 def reduce(self, factor: int | tuple[int, int] | list[int], box: _Box | None = ...) -> Image: ...
183 resample: _Resample = ...,
185 center: tuple[float, float] | None = ...,
186 translate: tuple[float, float] | None = ...,
187 fillcolor: _Color | None = ...,
191 fp: str | bytes | Path | _Writeable,
192 format: str | None = ...,
194 save_all: bool = ...,
195 bitmap_format: Literal["bmp", "png"] = ..., # for ICO files
198 def seek(self, frame: int) -> None: ...
199 def show(self, title: str | None = ..., command: str | None = ...) -> None: ...
200 def split(self) -> Tuple[Image, ...]: ...
201 def getchannel(self, channel: int | str) -> Image: ...
202 def tell(self) -> int: ...
203 def thumbnail(self, size: tuple[int, int], resample: _Resample = ..., reducing_gap: float = ...) -> None: ...
207 method: Literal[0, 1, 2, 3, 4],
209 resample: _Resample = ...,
211 fillcolor: _Color | int | None = ...,
213 def transpose(self, method: Literal[0, 1, 2, 3, 4, 5, 6]) -> Image: ...
214 def effect_spread(self, distance: int) -> Image: ...
215 def toqimage(self): ...
216 def toqpixmap(self): ...
218 class ImagePointHandler: ...
219 class ImageTransformHandler: ...
221 def new(mode: _Mode, size: tuple[int, int], color: float | Tuple[float, ...] | str = ...) -> Image: ...
222 def frombytes(mode: _Mode, size: tuple[int, int], data, decoder_name: str = ..., *args) -> Image: ...
223 def frombuffer(mode: _Mode, size: tuple[int, int], data, decoder_name: str = ..., *args) -> Image: ...
224 def fromarray(obj, mode: _Mode | None = ...) -> Image: ...
225 def fromqimage(im) -> Image: ...
226 def fromqpixmap(im) -> Image: ...
228 fp: str | bytes | Path | SupportsRead[bytes], mode: Literal["r"] = ..., formats: list[str] | tuple[str] | None = ...
230 def alpha_composite(im1: Image, im2: Image) -> Image: ...
231 def blend(im1: Image, im2: Image, alpha: float) -> Image: ...
232 def composite(image1: Image, image2: Image, mask: Image) -> Image: ...
233 def eval(image: Image, *args) -> Image: ...
234 def merge(mode: str, bands: Sequence[Image]) -> Image: ...
235 def register_open(id: str, factory, accept=...) -> None: ...
236 def register_mime(id: str, mimetype: str) -> None: ...
237 def register_save(id: str, driver) -> None: ...
238 def register_save_all(id: str, driver) -> None: ...
239 def register_extension(id: str, extension: str) -> None: ...
240 def register_extensions(id: str, extensions: Iterable[str]) -> None: ...
241 def registered_extensions() -> dict[str, str]: ...
242 def register_decoder(name: str, decoder) -> None: ...
243 def register_encoder(name: str, encoder) -> None: ...
244 def effect_mandelbrot(size: tuple[int, int], extent: tuple[float, float, float, float], quality: int) -> Image: ...
245 def effect_noise(size: tuple[int, int], sigma: float) -> Image: ...
246 def linear_gradient(mode: str) -> Image: ...
247 def radial_gradient(mode: str) -> Image: ...
249 class Exif(MutableMapping[int, Any]):
250 def load(self, data: bytes) -> None: ...
251 def tobytes(self, offset: int = ...) -> bytes: ...
252 def get_ifd(self, tag: int): ...
253 def __len__(self) -> int: ...
254 def __getitem__(self, tag: int) -> Any: ...
255 def __contains__(self, tag: object) -> bool: ...
256 def __setitem__(self, tag: int, value: Any) -> None: ...
257 def __delitem__(self, tag: int) -> None: ...
258 def __iter__(self) -> Iterator[int]: ...