Upgrading pillow 9 to 10
Breaking9.5.0 → 10.4.0Breaking3Security8Platform3Deprecated9New50Changed138Fixed81Other318
SecurityMedium · CVSS 6.7Fixes CVE-2024-28219 by using strncpy to avoid a buffer overflow.GHSA-44wm-f244-xhp3 · CVE-2024-28219 ↗
BreakingUpgrade verdict
3 breaking changes and 3 platform requirement changes and 8 security fixes.
In plain terms
- Qt 5 is no longer supported; only newer Qt versions work.
- The old way to measure text size with fonts is gone; use the newer text measurement methods instead.
- APIs that were deprecated in earlier releases have now been removed.
- Removes Python and NumPy version pinning on Cygwin.
Must act Top 5 of 23 that need code or config changes
Python requirement changed in 10.0.0: >=3.7 → >=3.8.
What you must change
Breaking3
Removes support for Qt 5.
Removes deprecated ImageFont.getsize and related functions for Pillow 10.0.0.
ImageFont.getsizeRemoves deprecations scheduled for Pillow 10.0.0.
Security8
Fixes CVE-2024-28219 by using strncpy to avoid a buffer overflow.
strncpyMedium · CVSS 6.7Restricts environment keys for ImageMath.eval().
ImageMath.eval()Arbitrary Code Execution in Pillow
High · CVSS 8.1libwebp: OOB write in BuildHuffmanTable
High · CVSS 8.8Pillow versions before v10.0.1 bundled libwebp binaries in wheels that are vulnerable to CVE-2023-5129 (previously CVE-2023-4863). Pillow v10.0.1 upgrades the bundled libwebp binary to v1.3.2.
High · CVSS 8.8Pillow versions before v10.0.1 bundled libwebp binaries in wheels that are vulnerable to CVE-2023-5129 (previously CVE-2023-4863). Pillow v10.0.1 upgrades the bundled libwebp binary to v1.3.2.
High · CVSS 8.8Pillow versions before v10.0.1 bundled libwebp binaries in wheels that are vulnerable to CVE-2023-5129 (previously CVE-2023-4863). Pillow v10.0.1 upgrades the bundled libwebp binary to v1.3.2.
An issue was discovered in Pillow before 10.0.0. It is a Denial of Service that uncontrollably allocates memory to process a given task, potentially causing a service to crash by having it run out of memory. This occurs for truetype in ImageFont when textlength in an ImageDraw instance operates on a long text argument.
Platform3
Removes Python and NumPy version pinning on Cygwin.
NumPyDrops support for soon end-of-life Python 3.7.
Replaces deprecated Py_FileSystemDefaultEncoding for Python 3.12 and later.
Py_FileSystemDefaultEncodingDeprecations to plan for
Deprecated9
Deprecates non-image ImageCms modes.
ImageCmsDeprecates the ImageDraw.getdraw hints parameter.
ImageDraw.getdrawDeprecates the BGR;15, BGR;16 and BGR;24 modes.
BGR;15BGR;16BGR;24Deprecates support for libtiff versions below 4.
libtiffDeprecates eval(), replacing it with lambda_eval() and unsafe_eval().
eval()lambda_eval()unsafe_eval()Deprecates ImageCms constants and the versions() function.
ImageCmsversions()Deprecates IptcImagePlugin helpers.
IptcImagePluginTranslates encoder error codes to strings and deprecates ImageFile.raise_oserror().
ImageFile.raise_oserror()Stops using CFFI access by default on PyPy.
API changes
Generated by DepDelta from published Python source. Not mixed with prose notes.
- changed:
constructor BdfFontFile(fp) → constructor BdfFontFile(fp: BinaryIO) -> None - changed:
function bdf_char(f) → function bdf_char(f: BinaryIO) -> tuple[str, int, tuple[tuple[int, int], tuple[int, int, int, int], tuple[int, int, int, int]], Image.Image] | None
- changed:
function decode_dxt1(data, alpha=…) → function decode_dxt1(data: bytes, alpha: bool=…) -> tuple[bytearray, bytearray, bytearray, bytearray] - changed:
function decode_dxt3(data) → function decode_dxt3(data: bytes) -> tuple[bytearray, bytearray, bytearray, bytearray] - changed:
function decode_dxt5(data) → function decode_dxt5(data: bytes) -> tuple[bytearray, bytearray, bytearray, bytearray] - changed:
function unpack_565(i) → function unpack_565(i: int) -> tuple[int, int, int] - changed:
method BLPEncoder.encode(bufsize) → method BLPEncoder.encode(bufsize: int) -> tuple[int, int, bytes]
- changed:
method BmpRleDecoder.decode(buffer) → method BmpRleDecoder.decode(buffer: bytes) -> tuple[int, int]
- changed:
function register_handler(handler) → function register_handler(handler: ImageFile.StubHandler | None) -> None
- changed:
class ContainerIO → class ContainerIO(Generic[AnyStr]) - changed:
constructor ContainerIO(file, offset, length) → constructor ContainerIO(file: IO[AnyStr], offset: int, length: int) -> None - changed:
method ContainerIO.isatty() → method ContainerIO.isatty() -> bool - changed:
method ContainerIO.read(n=…) → method ContainerIO.read(n: int=…) -> AnyStr - changed:
method ContainerIO.readline() → method ContainerIO.readline() -> AnyStr - changed:
method ContainerIO.readlines() → method ContainerIO.readlines() -> list[AnyStr] - changed:
method ContainerIO.seek(offset, mode=…) → method ContainerIO.seek(offset: int, mode: Literal[0, 1, 2]=…) -> None - changed:
method ContainerIO.tell() → method ContainerIO.tell() -> int
- changed:
method DcxImageFile.seek(frame) → method DcxImageFile.seek(frame: int) -> None - changed:
method DcxImageFile.tell() → method DcxImageFile.tell() -> int
- removed:
variable DDPF_ALPHA - removed:
variable DDPF_ALPHAPIXELS - removed:
variable DDPF_FOURCC - removed:
variable DDPF_LUMINANCE - removed:
variable DDPF_PALETTEINDEXED8 - removed:
variable DDPF_RGB - removed:
variable DDSCAPS2_CUBEMAP - removed:
variable DDSCAPS2_CUBEMAP_NEGATIVEX - removed:
variable DDSCAPS2_CUBEMAP_NEGATIVEY - removed:
variable DDSCAPS2_CUBEMAP_NEGATIVEZ - removed:
variable DDSCAPS2_CUBEMAP_POSITIVEX - removed:
variable DDSCAPS2_CUBEMAP_POSITIVEY - removed:
variable DDSCAPS2_CUBEMAP_POSITIVEZ - removed:
variable DDSCAPS2_VOLUME - removed:
variable DDSCAPS_COMPLEX - removed:
variable DDSCAPS_MIPMAP - removed:
variable DDSCAPS_TEXTURE - removed:
variable DDSD_CAPS - removed:
variable DDSD_DEPTH - removed:
variable DDSD_HEIGHT - removed:
variable DDSD_LINEARSIZE - removed:
variable DDSD_MIPMAPCOUNT - removed:
variable DDSD_PITCH - removed:
variable DDSD_PIXELFORMAT - removed:
variable DDSD_WIDTH - changed:
method DdsImageFile.load_seek(pos) → method DdsImageFile.load_seek(pos: int) -> None - added:
class D3DFMT(IntEnum) - added:
class DDPF(IntFlag) - added:
class DDSCAPS(IntFlag) - added:
class DDSCAPS2(IntFlag) - added:
class DDSD(IntFlag) - added:
class DXGI_FORMAT(IntEnum) - added:
class DdsRgbDecoder(ImageFile.PyDecoder) - added:
field D3DFMT.A1 - added:
field D3DFMT.A16B16G16R16 - added:
field D3DFMT.A16B16G16R16F - added:
field D3DFMT.A1R5G5B5 - added:
field D3DFMT.A2B10G10R10 - added:
field D3DFMT.A2B10G10R10_XR_BIAS - added:
field D3DFMT.A2R10G10B10 - added:
field D3DFMT.A2W10V10U10 - added:
field D3DFMT.A32B32G32R32F - added:
field D3DFMT.A4L4 - added:
field D3DFMT.A4R4G4B4 - added:
field D3DFMT.A8 - added:
field D3DFMT.A8B8G8R8 - added:
field D3DFMT.A8L8 - added:
field D3DFMT.A8P8 - added:
field D3DFMT.A8R3G3B2 - added:
field D3DFMT.A8R8G8B8 - added:
field D3DFMT.ATI1 - added:
field D3DFMT.ATI2 - added:
field D3DFMT.BC4S - added:
field D3DFMT.BC4U - added:
field D3DFMT.BC5S - added:
field D3DFMT.BC5U - added:
field D3DFMT.BINARYBUFFER - added:
field D3DFMT.CxV8U8 - added:
field D3DFMT.D15S1 - added:
field D3DFMT.D16 - added:
field D3DFMT.D16_LOCKABLE - added:
field D3DFMT.D24FS8 - added:
field D3DFMT.D24S8 - added:
field D3DFMT.D24X4S4 - added:
field D3DFMT.D24X8 - added:
field D3DFMT.D32 - added:
field D3DFMT.D32F_LOCKABLE - added:
field D3DFMT.D32_LOCKABLE - added:
field D3DFMT.DX10 - added:
field D3DFMT.DXT1 - added:
field D3DFMT.DXT2 - added:
field D3DFMT.DXT3 - added:
field D3DFMT.DXT4 - added:
field D3DFMT.DXT5 - added:
field D3DFMT.G16R16 - added:
field D3DFMT.G16R16F - added:
field D3DFMT.G32R32F - added:
field D3DFMT.G8R8_G8B8 - added:
field D3DFMT.INDEX16 - added:
field D3DFMT.INDEX32 - added:
field D3DFMT.L16 - added:
field D3DFMT.L6V5U5 - added:
field D3DFMT.L8 - added:
field D3DFMT.MULTI2_ARGB8 - added:
field D3DFMT.P8 - added:
field D3DFMT.Q16W16V16U16 - added:
field D3DFMT.Q8W8V8U8 - added:
field D3DFMT.R16F - added:
field D3DFMT.R32F - added:
field D3DFMT.R3G3B2 - added:
field D3DFMT.R5G6B5 - added:
field D3DFMT.R8G8B8 - added:
field D3DFMT.R8G8_B8G8 - added:
field D3DFMT.S8_LOCKABLE - added:
field D3DFMT.UNKNOWN - added:
field D3DFMT.UYVY - added:
field D3DFMT.V16U16 - added:
field D3DFMT.V8U8 - added:
field D3DFMT.VERTEXDATA - added:
field D3DFMT.X1R5G5B5 - added:
field D3DFMT.X4R4G4B4 - added:
field D3DFMT.X8B8G8R8 - added:
field D3DFMT.X8L8V8U8 - added:
field D3DFMT.X8R8G8B8 - added:
field D3DFMT.YUY2 - added:
field DDPF.ALPHA - added:
field DDPF.ALPHAPIXELS - added:
field DDPF.FOURCC - added:
field DDPF.LUMINANCE - added:
field DDPF.PALETTEINDEXED8 - added:
field DDPF.RGB - added:
field DDSCAPS.COMPLEX - added:
field DDSCAPS.MIPMAP - added:
field DDSCAPS.TEXTURE - added:
field DDSCAPS2.CUBEMAP - added:
field DDSCAPS2.CUBEMAP_NEGATIVEX - added:
field DDSCAPS2.CUBEMAP_NEGATIVEY - added:
field DDSCAPS2.CUBEMAP_NEGATIVEZ - added:
field DDSCAPS2.CUBEMAP_POSITIVEX - added:
field DDSCAPS2.CUBEMAP_POSITIVEY - added:
field DDSCAPS2.CUBEMAP_POSITIVEZ - added:
field DDSCAPS2.VOLUME - added:
field DDSD.CAPS - added:
field DDSD.DEPTH - added:
field DDSD.HEIGHT - added:
field DDSD.LINEARSIZE - added:
field DDSD.MIPMAPCOUNT - added:
field DDSD.PITCH - added:
field DDSD.PIXELFORMAT - added:
field DDSD.WIDTH - added:
field DXGI_FORMAT.A8P8 - added:
field DXGI_FORMAT.A8_UNORM - added:
field DXGI_FORMAT.AI44 - added:
field DXGI_FORMAT.AYUV - added:
field DXGI_FORMAT.B4G4R4A4_UNORM - added:
field DXGI_FORMAT.B5G5R5A1_UNORM - added:
field DXGI_FORMAT.B5G6R5_UNORM - added:
field DXGI_FORMAT.B8G8R8A8_TYPELESS - added:
field DXGI_FORMAT.B8G8R8A8_UNORM - added:
field DXGI_FORMAT.B8G8R8A8_UNORM_SRGB - added:
field DXGI_FORMAT.B8G8R8X8_TYPELESS - added:
field DXGI_FORMAT.B8G8R8X8_UNORM - added:
field DXGI_FORMAT.B8G8R8X8_UNORM_SRGB - added:
field DXGI_FORMAT.BC1_TYPELESS - added:
field DXGI_FORMAT.BC1_UNORM - added:
field DXGI_FORMAT.BC1_UNORM_SRGB - added:
field DXGI_FORMAT.BC2_TYPELESS - added:
field DXGI_FORMAT.BC2_UNORM - added:
field DXGI_FORMAT.BC2_UNORM_SRGB - added:
field DXGI_FORMAT.BC3_TYPELESS - added:
field DXGI_FORMAT.BC3_UNORM - added:
field DXGI_FORMAT.BC3_UNORM_SRGB - added:
field DXGI_FORMAT.BC4_SNORM - added:
field DXGI_FORMAT.BC4_TYPELESS - added:
field DXGI_FORMAT.BC4_UNORM - added:
field DXGI_FORMAT.BC5_SNORM - added:
field DXGI_FORMAT.BC5_TYPELESS - added:
field DXGI_FORMAT.BC5_UNORM - added:
field DXGI_FORMAT.BC6H_SF16 - added:
field DXGI_FORMAT.BC6H_TYPELESS - added:
field DXGI_FORMAT.BC6H_UF16 - added:
field DXGI_FORMAT.BC7_TYPELESS - added:
field DXGI_FORMAT.BC7_UNORM - added:
field DXGI_FORMAT.BC7_UNORM_SRGB - added:
field DXGI_FORMAT.D16_UNORM - added:
field DXGI_FORMAT.D24_UNORM_S8_UINT - added:
field DXGI_FORMAT.D32_FLOAT - added:
field DXGI_FORMAT.D32_FLOAT_S8X24_UINT - added:
field DXGI_FORMAT.G8R8_G8B8_UNORM - added:
field DXGI_FORMAT.IA44 - added:
field DXGI_FORMAT.NV11 - added:
field DXGI_FORMAT.NV12 - added:
field DXGI_FORMAT.OPAQUE_420 - added:
field DXGI_FORMAT.P010 - added:
field DXGI_FORMAT.P016 - added:
field DXGI_FORMAT.P208 - added:
field DXGI_FORMAT.P8 - added:
field DXGI_FORMAT.R10G10B10A2_TYPELESS - added:
field DXGI_FORMAT.R10G10B10A2_UINT - added:
field DXGI_FORMAT.R10G10B10A2_UNORM - added:
field DXGI_FORMAT.R10G10B10_XR_BIAS_A2_UNORM - added:
field DXGI_FORMAT.R11G11B10_FLOAT - added:
field DXGI_FORMAT.R16G16B16A16_FLOAT - added:
field DXGI_FORMAT.R16G16B16A16_SINT - added:
field DXGI_FORMAT.R16G16B16A16_SNORM - added:
field DXGI_FORMAT.R16G16B16A16_TYPELESS - added:
field DXGI_FORMAT.R16G16B16A16_UINT - added:
field DXGI_FORMAT.R16G16B16A16_UNORM - added:
field DXGI_FORMAT.R16G16_FLOAT - added:
field DXGI_FORMAT.R16G16_SINT - added:
field DXGI_FORMAT.R16G16_SNORM - added:
field DXGI_FORMAT.R16G16_TYPELESS - added:
field DXGI_FORMAT.R16G16_UINT - added:
field DXGI_FORMAT.R16G16_UNORM - added:
field DXGI_FORMAT.R16_FLOAT - added:
field DXGI_FORMAT.R16_SINT - added:
field DXGI_FORMAT.R16_SNORM - added:
field DXGI_FORMAT.R16_TYPELESS - added:
field DXGI_FORMAT.R16_UINT - added:
field DXGI_FORMAT.R16_UNORM - added:
field DXGI_FORMAT.R1_UNORM - added:
field DXGI_FORMAT.R24G8_TYPELESS - added:
field DXGI_FORMAT.R24_UNORM_X8_TYPELESS - added:
field DXGI_FORMAT.R32G32B32A32_FLOAT - added:
field DXGI_FORMAT.R32G32B32A32_SINT - added:
field DXGI_FORMAT.R32G32B32A32_TYPELESS - added:
field DXGI_FORMAT.R32G32B32A32_UINT - added:
field DXGI_FORMAT.R32G32B32_FLOAT - added:
field DXGI_FORMAT.R32G32B32_SINT - added:
field DXGI_FORMAT.R32G32B32_TYPELESS - added:
field DXGI_FORMAT.R32G32B32_UINT - added:
field DXGI_FORMAT.R32G32_FLOAT - added:
field DXGI_FORMAT.R32G32_SINT - added:
field DXGI_FORMAT.R32G32_TYPELESS - added:
field DXGI_FORMAT.R32G32_UINT - added:
field DXGI_FORMAT.R32G8X24_TYPELESS - added:
field DXGI_FORMAT.R32_FLOAT - added:
field DXGI_FORMAT.R32_FLOAT_X8X24_TYPELESS - added:
field DXGI_FORMAT.R32_SINT - added:
field DXGI_FORMAT.R32_TYPELESS - added:
field DXGI_FORMAT.R32_UINT - added:
field DXGI_FORMAT.R8G8B8A8_SINT - added:
field DXGI_FORMAT.R8G8B8A8_SNORM - added:
field DXGI_FORMAT.R8G8B8A8_TYPELESS - added:
field DXGI_FORMAT.R8G8B8A8_UINT - added:
field DXGI_FORMAT.R8G8B8A8_UNORM - added:
field DXGI_FORMAT.R8G8B8A8_UNORM_SRGB - added:
field DXGI_FORMAT.R8G8_B8G8_UNORM - added:
field DXGI_FORMAT.R8G8_SINT - added:
field DXGI_FORMAT.R8G8_SNORM - added:
field DXGI_FORMAT.R8G8_TYPELESS - added:
field DXGI_FORMAT.R8G8_UINT - added:
field DXGI_FORMAT.R8G8_UNORM - added:
field DXGI_FORMAT.R8_SINT - added:
field DXGI_FORMAT.R8_SNORM - added:
field DXGI_FORMAT.R8_TYPELESS - added:
field DXGI_FORMAT.R8_UINT - added:
field DXGI_FORMAT.R8_UNORM - added:
field DXGI_FORMAT.R9G9B9E5_SHAREDEXP - added:
field DXGI_FORMAT.SAMPLER_FEEDBACK_MIN_MIP_OPAQUE - added:
field DXGI_FORMAT.SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE - added:
field DXGI_FORMAT.UNKNOWN - added:
field DXGI_FORMAT.V208 - added:
field DXGI_FORMAT.V408 - added:
field DXGI_FORMAT.X24_TYPELESS_G8_UINT - added:
field DXGI_FORMAT.X32_TYPELESS_G8X24_UINT - added:
field DXGI_FORMAT.Y210 - added:
field DXGI_FORMAT.Y216 - added:
field DXGI_FORMAT.Y410 - added:
field DXGI_FORMAT.Y416 - added:
field DXGI_FORMAT.YUY2 - added:
method DdsRgbDecoder.decode(buffer: bytes) -> tuple[int, int] - added:
variable module
- changed:
function has_ghostscript() → function has_ghostscript() -> bool - changed:
method EpsImageFile.load_seek(*args, **kwargs) → method EpsImageFile.load_seek(pos: int) -> None - changed:
method PSFile.readline() → method PSFile.readline() -> str - added:
variable gs_binary: str | bool | None
- removed:
field Interop.RleatedImageHeight - added:
field Interop.RelatedImageHeight
- added:
class FitsGzipDecoder(ImageFile.PyDecoder) - added:
method FitsGzipDecoder.decode(buffer: bytes) -> tuple[int, int]
- removed:
class FITSStubImageFile(ImageFile.StubImageFile) - removed:
field FITSStubImageFile.format - removed:
field FITSStubImageFile.format_description - removed:
function register_handler(handler)
- changed:
method FliImageFile.seek(frame) → method FliImageFile.seek(frame: int) -> None - changed:
method FliImageFile.tell() → method FliImageFile.tell() -> int
- changed:
constructor FontFile() → constructor FontFile() -> None - changed:
field FontFile.bitmap → field FontFile.bitmap: Image.Image | None - changed:
function puti16(fp, values) → function puti16(fp: BinaryIO, values: tuple[int, int, int, int, int, int, int, int, int, int]) -> None - changed:
method FontFile.compile() → method FontFile.compile() -> None - changed:
method FontFile.save(filename) → method FontFile.save(filename: str) -> None
- changed:
method FpxImageFile.close() → method FpxImageFile.close() -> None
- changed:
method FtexImageFile.load_seek(pos) → method FtexImageFile.load_seek(pos: int) -> None
- changed:
function open(fp, mode=…) → function open(fp: StrOrBytesPath | IO[bytes], mode: str=…) -> GdImageFile
- removed:
property GifImageFile.is_animated - removed:
property GifImageFile.n_frames - changed:
function get_interlace(im) → function get_interlace(im: Image.Image) -> int - changed:
function getdata(im, offset=…, **params) → function getdata(im: Image.Image, offset: tuple[int, int]=…, **params: Any) -> list[bytes] - changed:
function getheader(im, palette=…, info=…) → function getheader(im: Image.Image, palette: _Palette | None=…, info: dict[str, Any] | None=…) -> tuple[list[bytes], list[int] | None] - changed:
method GifImageFile.data() → method GifImageFile.data() -> bytes | None - changed:
method GifImageFile.load_end() → method GifImageFile.load_end() -> None - changed:
method GifImageFile.load_prepare() → method GifImageFile.load_prepare() -> None - changed:
method GifImageFile.seek(frame) → method GifImageFile.seek(frame: int) -> None - changed:
method GifImageFile.tell() → method GifImageFile.tell() -> int - added:
property GifImageFile.is_animated -> bool - added:
property GifImageFile.n_frames -> int
- changed:
constructor GimpGradientFile(fp) → constructor GimpGradientFile(fp: IO[bytes]) -> None - changed:
field GradientFile.gradient → field GradientFile.gradient: list[tuple[float, float, float, list[float], list[float], Callable[[float, float], float]]] | None - changed:
function curved(middle, pos) → function curved(middle: float, pos: float) -> float - changed:
function linear(middle, pos) → function linear(middle: float, pos: float) -> float - changed:
function sine(middle, pos) → function sine(middle: float, pos: float) -> float - changed:
function sphere_decreasing(middle, pos) → function sphere_decreasing(middle: float, pos: float) -> float - changed:
function sphere_increasing(middle, pos) → function sphere_increasing(middle: float, pos: float) -> float - changed:
method GradientFile.getpalette(entries=…) → method GradientFile.getpalette(entries: int=…) -> tuple[bytes, str]
- changed:
constructor GimpPaletteFile(fp) → constructor GimpPaletteFile(fp: IO[bytes]) -> None - changed:
method GimpPaletteFile.getpalette() → method GimpPaletteFile.getpalette() -> tuple[bytes, str]
- changed:
function register_handler(handler) → function register_handler(handler: ImageFile.StubHandler | None) -> None
- changed:
function register_handler(handler) → function register_handler(handler: ImageFile.StubHandler | None) -> None
- changed:
method IcoFile.frame(idx) → method IcoFile.frame(idx: int) -> Image.Image - changed:
method IcoImageFile.load_seek() → method IcoImageFile.load_seek(pos: int) -> None
- removed:
property ImImageFile.is_animated - removed:
property ImImageFile.n_frames - changed:
function number(s) → function number(s: Any) -> float - changed:
method ImImageFile.seek(frame) → method ImImageFile.seek(frame: int) -> None - changed:
method ImImageFile.tell() → method ImImageFile.tell() -> int - added:
property ImImageFile.is_animated -> bool - added:
property ImImageFile.n_frames -> int
- removed:
function coerce_e(value) - removed:
property Image.height - removed:
property Image.size - removed:
property Image.width - changed:
class Exif(MutableMapping) → class Exif(_ExifBase) - changed:
field Image.format → field Image.format: str | None - changed:
field Image.format_description → field Image.format_description: str | None - changed:
function alpha_composite(im1, im2) → function alpha_composite(im1: Image, im2: Image) -> Image - changed:
function blend(im1, im2, alpha) → function blend(im1: Image, im2: Image, alpha: float) -> Image - changed:
function composite(image1, image2, mask) → function composite(image1: Image, image2: Image, mask: Image) -> Image - changed:
function effect_mandelbrot(size, extent, quality) → function effect_mandelbrot(size: tuple[int, int], extent: tuple[float, float, float, float], quality: int) -> Image - changed:
function effect_noise(size, sigma) → function effect_noise(size: tuple[int, int], sigma: float) -> Image - changed:
function fromarray(obj, mode=…) → function fromarray(obj: SupportsArrayInterface, mode: str | None=…) -> Image - changed:
function frombuffer(mode, size, data, decoder_name=…, *args) → function frombuffer(mode: str, size: tuple[int, int], data, decoder_name: str=…, *args: Any) -> Image - changed:
function frombytes(mode, size, data, decoder_name=…, *args) → function frombytes(mode: str, size: tuple[int, int], data: bytes | bytearray, decoder_name: str=…, *args: Any) -> Image - changed:
function getmodebandnames(mode) → function getmodebandnames(mode: str) -> tuple[str, ...] - changed:
function getmodebands(mode) → function getmodebands(mode: str) -> int - changed:
function getmodebase(mode) → function getmodebase(mode: str) -> str - changed:
function getmodetype(mode) → function getmodetype(mode: str) -> str - changed:
function init() → function init() -> bool - changed:
function isImageType(t) → function isImageType(t: Any) -> TypeGuard[Image] - changed:
function linear_gradient(mode) → function linear_gradient(mode: str) -> Image - changed:
function merge(mode, bands) → function merge(mode: str, bands: Sequence[Image]) -> Image - changed:
function new(mode, size, color=…) → function new(mode: str, size: tuple[int, int] | list[int], color: float | tuple[float, ...] | str | None=…) -> Image - changed:
function open(fp, mode=…, formats=…) → function open(fp: StrOrBytesPath | IO[bytes], mode: Literal['r']=…, formats: list[str] | tuple[str, ...] | None=…) -> ImageFile.ImageFile - changed:
function preinit() → function preinit() -> None - changed:
function radial_gradient(mode) → function radial_gradient(mode: str) -> Image - changed:
function register_decoder(name, decoder) → function register_decoder(name: str, decoder: type[ImageFile.PyDecoder]) -> None - changed:
function register_encoder(name, encoder) → function register_encoder(name: str, encoder: type[ImageFile.PyEncoder]) -> None - changed:
function register_extension(id, extension) → function register_extension(id: str, extension: str) -> None - changed:
function register_extensions(id, extensions) → function register_extensions(id: str, extensions: list[str]) -> None - changed:
function register_mime(id, mimetype) → function register_mime(id: str, mimetype: str) -> None - changed:
function register_open(id, factory, accept=…) → function register_open(id: str, factory: Callable[[IO[bytes], str | bytes], ImageFile.ImageFile], accept: Callable[[bytes], bool | str] | None=…) -> None - changed:
function register_save(id, driver) → function register_save(id: str, driver: Callable[[Image, IO[bytes], str | bytes], None]) -> None - changed:
function register_save_all(id, driver) → function register_save_all(id: str, driver: Callable[[Image, IO[bytes], str | bytes], None]) -> None - changed:
function registered_extensions() → function registered_extensions() -> dict[str, str] - changed:
method Exif.hide_offsets() → method Exif.hide_offsets() -> None - changed:
method Exif.tobytes(offset=…) → method Exif.tobytes(offset: int=…) -> bytes - changed:
method Image.alpha_composite(im, dest=…, source=…) → method Image.alpha_composite(im: Image, dest: Sequence[int]=…, source: Sequence[int]=…) -> None - changed:
method Image.apply_transparency() → method Image.apply_transparency() -> None - changed:
method Image.close() → method Image.close() -> None - changed:
method Image.convert(mode=…, matrix=…, dither=…, palette=…, colors=…) → method Image.convert(mode: str | None=…, matrix: tuple[float, ...] | None=…, dither: Dither | None=…, palette: Palette=…, colors: int=…) -> Image - changed:
method Image.copy() → method Image.copy() -> Image - changed:
method Image.crop(box=…) → method Image.crop(box: tuple[float, float, float, float] | None=…) -> Image - changed:
method Image.draft(mode, size) → method Image.draft(mode: str | None, size: tuple[int, int] | None) -> tuple[str, tuple[int, int, float, float]] | None - changed:
method Image.effect_spread(distance) → method Image.effect_spread(distance: int) -> Image - changed:
method Image.filter(filter) → method Image.filter(filter: ImageFilter.Filter | type[ImageFilter.Filter]) -> Image - changed:
method Image.frombytes(data, decoder_name=…, *args) → method Image.frombytes(data: bytes | bytearray, decoder_name: str=…, *args: Any) -> None - changed:
method Image.get_child_images() → method Image.get_child_images() -> list[ImageFile.ImageFile] - changed:
method Image.getbands() → method Image.getbands() -> tuple[str, ...] - changed:
method Image.getbbox() → method Image.getbbox(*, alpha_only: bool=…) -> tuple[int, int, int, int] | None - changed:
method Image.getchannel(channel) → method Image.getchannel(channel: int | str) -> Image - changed:
method Image.getcolors(maxcolors=…) → method Image.getcolors(maxcolors: int=…) - changed:
method Image.getdata(band=…) → method Image.getdata(band: int | None=…) - changed:
method Image.getexif() → method Image.getexif() -> Exif - changed:
method Image.getextrema() → method Image.getextrema() -> tuple[float, float] | tuple[tuple[int, int], ...] - changed:
method Image.getpalette(rawmode=…) → method Image.getpalette(rawmode: str | None=…) -> list[int] | None - changed:
method Image.getpixel(xy) → method Image.getpixel(xy: tuple[int, int] | list[int]) -> float | tuple[int, ...] | None - changed:
method Image.getprojection() → method Image.getprojection() -> tuple[list[int], list[int]] - changed:
method Image.histogram(mask=…, extrema=…) → method Image.histogram(mask: Image | None=…, extrema=…) -> list[int] - changed:
method Image.load() → method Image.load() -> core.PixelAccess | PyAccess.PyAccess | None - changed:
method Image.paste(im, box=…, mask=…) → method Image.paste(im: Image | str | float | tuple[float, ...], box: Image | tuple[int, int, int, int] | tuple[int, int] | None=…, mask: Image | None=…) -> None - changed:
method Image.point(lut, mode=…) → method Image.point(lut: Sequence[float] | Callable[[int], float] | ImagePointHandler, mode: str | None=…) -> Image - changed:
method Image.putalpha(alpha) → method Image.putalpha(alpha: Image | int) -> None - changed:
method Image.putdata(data, scale=…, offset=…) → method Image.putdata(data: Sequence[float] | Sequence[Sequence[int]], scale: float=…, offset: float=…) -> None - changed:
method Image.putpalette(data, rawmode=…) → method Image.putpalette(data, rawmode=…) -> None - changed:
method Image.putpixel(xy, value) → method Image.putpixel(xy: tuple[int, int], value: float | tuple[int, ...] | list[int]) -> None - changed:
method Image.quantize(colors=…, method=…, kmeans=…, palette=…, dither=…) → method Image.quantize(colors: int=…, method: int | None=…, kmeans: int=…, palette=…, dither: Dither=…) -> Image - changed:
method Image.reduce(factor, box=…) → method Image.reduce(factor: int | tuple[int, int], box: tuple[int, int, int, int] | None=…) -> Image - changed:
method Image.resize(size, resample=…, box=…, reducing_gap=…) → method Image.resize(size: tuple[int, int], resample: int | None=…, box: tuple[float, float, float, float] | None=…, reducing_gap: float | None=…) -> Image - changed:
method Image.rotate(angle, resample=…, expand=…, center=…, translate=…, fillcolor=…) → method Image.rotate(angle: float, resample: Resampling=…, expand: int | bool=…, center: tuple[float, float] | None=…, translate: tuple[int, int] | None=…, fillcolor: float | tuple[float, ...] | str | None=…) -> Image - changed:
method Image.save(fp, format=…, **params) → method Image.save(fp: StrOrBytesPath | IO[bytes], format: str | None=…, **params: Any) -> None - changed:
method Image.seek(frame) → method Image.seek(frame: int) -> None - changed:
method Image.show(title=…) → method Image.show(title: str | None=…) -> None - changed:
method Image.split() → method Image.split() -> tuple[Image, ...] - changed:
method Image.tell() → method Image.tell() -> int - changed:
method Image.thumbnail(size, resample=…, reducing_gap=…) → method Image.thumbnail(size: tuple[float, float], resample: Resampling=…, reducing_gap: float | None=…) -> None - changed:
method Image.tobitmap(name=…) → method Image.tobitmap(name: str=…) -> bytes - changed:
method Image.tobytes(encoder_name=…, *args) → method Image.tobytes(encoder_name: str=…, *args: Any) -> bytes - changed:
method Image.transform(size, method, data=…, resample=…, fill=…, fillcolor=…) → method Image.transform(size: tuple[int, int], method: Transform | ImageTransformHandler | SupportsGetData, data: Sequence[Any] | None=…, resample: int=…, fill: int=…, fillcolor: float | tuple[float, ...] | str | None=…) -> Image - changed:
method Image.transpose(method) → method Image.transpose(method: Transpose) -> Image - changed:
method Image.verify() → method Image.verify() -> None - changed:
variable DECODERS → variable DECODERS: dict[str, type[ImageFile.PyDecoder]] - changed:
variable ENCODERS → variable ENCODERS: dict[str, type[ImageFile.PyEncoder]] - changed:
variable EXTENSION → variable EXTENSION: dict[str, str] - changed:
variable ID → variable ID: list[str] - changed:
variable MAX_IMAGE_PIXELS → variable MAX_IMAGE_PIXELS: int | None - changed:
variable MIME → variable MIME: dict[str, str] - changed:
variable OPEN → variable OPEN: dict[str, tuple[Callable[[IO[bytes], str | bytes], ImageFile.ImageFile], Callable[[bytes], bool | str] | None]] - changed:
variable SAVE → variable SAVE: dict[str, Callable[[Image, IO[bytes], str | bytes], None]] - changed:
variable SAVE_ALL → variable SAVE_ALL: dict[str, Callable[[Image, IO[bytes], str | bytes], None]] - added:
class SupportsArrayInterface(Protocol) - added:
class SupportsGetData(Protocol) - added:
method Image.getxmp() - added:
method ImagePointHandler.point(im: Image) -> Image - added:
method ImageTransformHandler.transform(size: tuple[int, int], image: Image, **options: Any) -> Image - added:
method SupportsGetData.getdata() -> tuple[Transform, Sequence[int]] - added:
property Image.has_transparency_data -> bool - added:
property Image.height -> int - added:
property Image.mode -> str - added:
property Image.size -> tuple[int, int] - added:
property Image.width -> int - added:
variable ElementTree: ModuleType | None - added:
variable WARN_POSSIBLE_FORMATS: bool - added:
variable cffi: ModuleType | None
- changed:
function add(image1, image2, scale=…, offset=…) → function add(image1: Image.Image, image2: Image.Image, scale: float=…, offset: float=…) -> Image.Image - changed:
function add_modulo(image1, image2) → function add_modulo(image1: Image.Image, image2: Image.Image) -> Image.Image - changed:
function blend(image1, image2, alpha) → function blend(image1: Image.Image, image2: Image.Image, alpha: float) -> Image.Image - changed:
function composite(image1, image2, mask) → function composite(image1: Image.Image, image2: Image.Image, mask: Image.Image) -> Image.Image - changed:
function constant(image, value) → function constant(image: Image.Image, value: int) -> Image.Image - changed:
function darker(image1, image2) → function darker(image1: Image.Image, image2: Image.Image) -> Image.Image - changed:
function difference(image1, image2) → function difference(image1: Image.Image, image2: Image.Image) -> Image.Image - changed:
function duplicate(image) → function duplicate(image: Image.Image) -> Image.Image - changed:
function hard_light(image1, image2) → function hard_light(image1: Image.Image, image2: Image.Image) -> Image.Image - changed:
function invert(image) → function invert(image: Image.Image) -> Image.Image - changed:
function lighter(image1, image2) → function lighter(image1: Image.Image, image2: Image.Image) -> Image.Image - changed:
function logical_and(image1, image2) → function logical_and(image1: Image.Image, image2: Image.Image) -> Image.Image - changed:
function logical_or(image1, image2) → function logical_or(image1: Image.Image, image2: Image.Image) -> Image.Image - changed:
function logical_xor(image1, image2) → function logical_xor(image1: Image.Image, image2: Image.Image) -> Image.Image - changed:
function multiply(image1, image2) → function multiply(image1: Image.Image, image2: Image.Image) -> Image.Image - changed:
function offset(image, xoffset, yoffset=…) → function offset(image: Image.Image, xoffset: int, yoffset: int | None=…) -> Image.Image - changed:
function overlay(image1, image2) → function overlay(image1: Image.Image, image2: Image.Image) -> Image.Image - changed:
function screen(image1, image2) → function screen(image1: Image.Image, image2: Image.Image) -> Image.Image - changed:
function soft_light(image1, image2) → function soft_light(image1: Image.Image, image2: Image.Image) -> Image.Image - changed:
function subtract(image1, image2, scale=…, offset=…) → function subtract(image1: Image.Image, image2: Image.Image, scale: float=…, offset: float=…) -> Image.Image - changed:
function subtract_modulo(image1, image2) → function subtract_modulo(image1: Image.Image, image2: Image.Image) -> Image.Image
- removed:
variable DESCRIPTION - removed:
variable FLAGS - removed:
variable VERSION - changed:
constructor ImageCmsProfile(profile) → constructor ImageCmsProfile(profile: str | SupportsRead[bytes] | core.CmsProfile) -> None - changed:
constructor ImageCmsTransform(input, output, input_mode, output_mode, intent=…, proof=…, proof_intent=…, flags=…) → constructor ImageCmsTransform(input: ImageCmsProfile, output: ImageCmsProfile, input_mode: str, output_mode: str, intent: Intent=…, proof: ImageCmsProfile | None=…, proof_intent: Intent=…, flags: Flags=…) - changed:
function applyTransform(im, transform, inPlace=…) → function applyTransform(im: Image.Image, transform: ImageCmsTransform, inPlace: bool=…) -> Image.Image | None - changed:
function buildProofTransform(inputProfile, outputProfile, proofProfile, inMode, outMode, renderingIntent=…, proofRenderingIntent=…, flags=…) → function buildProofTransform(inputProfile: _CmsProfileCompatible, outputProfile: _CmsProfileCompatible, proofProfile: _CmsProfileCompatible, inMode: str, outMode: str, renderingIntent: Intent=…, proofRenderingIntent: Intent=…, flags: Flags=…) -> ImageCmsTransform - changed:
function buildTransform(inputProfile, outputProfile, inMode, outMode, renderingIntent=…, flags=…) → function buildTransform(inputProfile: _CmsProfileCompatible, outputProfile: _CmsProfileCompatible, inMode: str, outMode: str, renderingIntent: Intent=…, flags: Flags=…) -> ImageCmsTransform - changed:
function createProfile(colorSpace, colorTemp=…) → function createProfile(colorSpace: Literal['LAB', 'XYZ', 'sRGB'], colorTemp: SupportsFloat=…) -> core.CmsProfile - changed:
function getDefaultIntent(profile) → function getDefaultIntent(profile: _CmsProfileCompatible) -> int - changed:
function getOpenProfile(profileFilename) → function getOpenProfile(profileFilename: str | SupportsRead[bytes] | core.CmsProfile) -> ImageCmsProfile - changed:
function getProfileCopyright(profile) → function getProfileCopyright(profile: _CmsProfileCompatible) -> str - changed:
function getProfileDescription(profile) → function getProfileDescription(profile: _CmsProfileCompatible) -> str - changed:
function getProfileInfo(profile) → function getProfileInfo(profile: _CmsProfileCompatible) -> str - changed:
function getProfileManufacturer(profile) → function getProfileManufacturer(profile: _CmsProfileCompatible) -> str - changed:
function getProfileModel(profile) → function getProfileModel(profile: _CmsProfileCompatible) -> str - changed:
function getProfileName(profile) → function getProfileName(profile: _CmsProfileCompatible) -> str - changed:
function get_display_profile(handle=…) → function get_display_profile(handle: SupportsInt | None=…) -> ImageCmsProfile | None - changed:
function isIntentSupported(profile, intent, direction) → function isIntentSupported(profile: _CmsProfileCompatible, intent: Intent, direction: Direction) -> Literal[-1, 1] - changed:
function profileToProfile(im, inputProfile, outputProfile, renderingIntent=…, outputMode=…, inPlace=…, flags=…) → function profileToProfile(im: Image.Image, inputProfile: _CmsProfileCompatible, outputProfile: _CmsProfileCompatible, renderingIntent: Intent=…, outputMode: str | None=…, inPlace: bool=…, flags: Flags=…) -> Image.Image | None - changed:
function versions() → function versions() -> tuple[str, str | None, str, str] - changed:
method ImageCmsProfile.tobytes() → method ImageCmsProfile.tobytes() -> bytes - changed:
method ImageCmsTransform.apply(im, imOut=…) → method ImageCmsTransform.apply(im: Image.Image, imOut: Image.Image | None=…) -> Image.Image - changed:
method ImageCmsTransform.apply_in_place(im) → method ImageCmsTransform.apply_in_place(im: Image.Image) -> Image.Image - changed:
method ImageCmsTransform.point(im) → method ImageCmsTransform.point(im: Image.Image) -> Image.Image - added:
class Flags(IntFlag) - added:
field Flags.BLACKPOINTCOMPENSATION - added:
field Flags.CLUT_POST_LINEARIZATION - added:
field Flags.CLUT_PRE_LINEARIZATION - added:
field Flags.COPY_ALPHA - added:
field Flags.FORCE_CLUT - added:
field Flags.GAMUTCHECK - added:
field Flags.GUESSDEVICECLASS - added:
field Flags.HIGHRESPRECALC - added:
field Flags.KEEP_SEQUENCE - added:
field Flags.LOWRESPRECALC - added:
field Flags.NOCACHE - added:
field Flags.NODEFAULTRESOURCEDEF - added:
field Flags.NONE - added:
field Flags.NONEGATIVES - added:
field Flags.NOOPTIMIZE - added:
field Flags.NOWHITEONWHITEFIXUP - added:
field Flags.NULLTRANSFORM - added:
field Flags.SOFTPROOFING - added:
field Flags.USE_8BITS_DEVICELINK - added:
static method Flags.GRIDPOINTS(n: int) -> Flags
- changed:
function getcolor(color, mode) → function getcolor(color: str, mode: str) -> int | tuple[int, ...] - changed:
function getrgb(color) → function getrgb(color: str) -> tuple[int, int, int] | tuple[int, int, int, int] - changed:
variable colormap → variable colormap: dict[str, str | tuple[int, int, int]]
- removed:
method ImageDraw.multiline_textsize(text, font=…, spacing=…, direction=…, features=…, language=…, stroke_width=…) - removed:
method ImageDraw.textsize(text, font=…, spacing=…, direction=…, features=…, language=…, stroke_width=…) - changed:
constructor ImageDraw(im, mode=…) → constructor ImageDraw(im: Image.Image, mode: str | None=…) -> None - changed:
field ImageDraw.font → field ImageDraw.font: ImageFont.ImageFont | ImageFont.FreeTypeFont | ImageFont.TransposedFont | None - changed:
function Draw(im, mode=…) → function Draw(im: Image.Image, mode: str | None=…) -> ImageDraw - changed:
function floodfill(image, xy, value, border=…, thresh=…) → function floodfill(image: Image.Image, xy: tuple[int, int], value: float | tuple[int, ...], border: float | tuple[int, ...] | None=…, thresh: float=…) -> None - changed:
function getdraw(im=…, hints=…) → function getdraw(im: Image.Image | None=…, hints: list[str] | None=…) -> tuple[ImageDraw2.Draw | None, ModuleType] - changed:
method ImageDraw.arc(xy, start, end, fill=…, width=…) → method ImageDraw.arc(xy: Coords, start: float, end: float, fill: _Ink | None=…, width: int=…) -> None - changed:
method ImageDraw.bitmap(xy, bitmap, fill=…) → method ImageDraw.bitmap(xy: Sequence[int], bitmap: Image.Image, fill: _Ink | None=…) -> None - changed:
method ImageDraw.chord(xy, start, end, fill=…, outline=…, width=…) → method ImageDraw.chord(xy: Coords, start: float, end: float, fill: _Ink | None=…, outline: _Ink | None=…, width: int=…) -> None - changed:
method ImageDraw.ellipse(xy, fill=…, outline=…, width=…) → method ImageDraw.ellipse(xy: Coords, fill: _Ink | None=…, outline: _Ink | None=…, width: int=…) -> None - changed:
method ImageDraw.getfont() → method ImageDraw.getfont() -> ImageFont.ImageFont | ImageFont.FreeTypeFont | ImageFont.TransposedFont - changed:
method ImageDraw.line(xy, fill=…, width=…, joint=…) → method ImageDraw.line(xy: Coords, fill: _Ink | None=…, width: int=…, joint: str | None=…) -> None - changed:
method ImageDraw.multiline_text(xy, text, fill=…, font=…, anchor=…, spacing=…, align=…, direction=…, features=…, language=…, stroke_width=…, stroke_fill=…, embedded_color=…) → method ImageDraw.multiline_text(xy: tuple[float, float], text: str, fill=…, font: ImageFont.ImageFont | ImageFont.FreeTypeFont | ImageFont.TransposedFont | None=…, anchor=…, spacing=…, align=…, direction=…, features=…, language=…, stroke_width=…, stroke_fill=…, embedded_color=…, *, font_size=…) -> None - changed:
method ImageDraw.multiline_textbbox(xy, text, font=…, anchor=…, spacing=…, align=…, direction=…, features=…, language=…, stroke_width=…, embedded_color=…) → method ImageDraw.multiline_textbbox(xy, text, font=…, anchor=…, spacing=…, align=…, direction=…, features=…, language=…, stroke_width=…, embedded_color=…, *, font_size=…) -> tuple[int, int, int, int] - changed:
method ImageDraw.pieslice(xy, start, end, fill=…, outline=…, width=…) → method ImageDraw.pieslice(xy: Coords, start: float, end: float, fill: _Ink | None=…, outline: _Ink | None=…, width: int=…) -> None - changed:
method ImageDraw.point(xy, fill=…) → method ImageDraw.point(xy: Coords, fill: _Ink | None=…) -> None - changed:
method ImageDraw.polygon(xy, fill=…, outline=…, width=…) → method ImageDraw.polygon(xy: Coords, fill: _Ink | None=…, outline: _Ink | None=…, width: int=…) -> None - changed:
method ImageDraw.rectangle(xy, fill=…, outline=…, width=…) → method ImageDraw.rectangle(xy: Coords, fill: _Ink | None=…, outline: _Ink | None=…, width: int=…) -> None - changed:
method ImageDraw.regular_polygon(bounding_circle, n_sides, rotation=…, fill=…, outline=…) → method ImageDraw.regular_polygon(bounding_circle: Sequence[Sequence[float] | float], n_sides: int, rotation: float=…, fill: _Ink | None=…, outline: _Ink | None=…, width: int=…) -> None - changed:
method ImageDraw.rounded_rectangle(xy, radius=…, fill=…, outline=…, width=…, *, corners=…) → method ImageDraw.rounded_rectangle(xy: Coords, radius: float=…, fill: _Ink | None=…, outline: _Ink | None=…, width: int=…, *, corners: tuple[bool, bool, bool, bool] | None=…) -> None - changed:
method ImageDraw.shape(shape, fill=…, outline=…) → method ImageDraw.shape(shape: Image.core._Outline, fill: _Ink | None=…, outline: _Ink | None=…) -> None - changed:
method ImageDraw.text(xy, text, fill=…, font=…, anchor=…, spacing=…, align=…, direction=…, features=…, language=…, stroke_width=…, stroke_fill=…, embedded_color=…, *args, **kwargs) → method ImageDraw.text(xy: tuple[float, float], text: str, fill=…, font: ImageFont.ImageFont | ImageFont.FreeTypeFont | ImageFont.TransposedFont | None=…, anchor=…, spacing=…, align=…, direction=…, features=…, language=…, stroke_width=…, stroke_fill=…, embedded_color=…, *args, **kwargs) -> None - changed:
method ImageDraw.textbbox(xy, text, font=…, anchor=…, spacing=…, align=…, direction=…, features=…, language=…, stroke_width=…, embedded_color=…) → method ImageDraw.textbbox(xy, text, font=…, anchor=…, spacing=…, align=…, direction=…, features=…, language=…, stroke_width=…, embedded_color=…, *, font_size=…) -> tuple[int, int, int, int] - changed:
method ImageDraw.textlength(text, font=…, direction=…, features=…, language=…, embedded_color=…) → method ImageDraw.textlength(text: str, font: ImageFont.ImageFont | ImageFont.FreeTypeFont | ImageFont.TransposedFont | None=…, direction=…, features=…, language=…, embedded_color=…, *, font_size=…) -> float - added:
method ImageDraw.circle(xy: Sequence[float], radius: float, fill: _Ink | None=…, outline: _Ink | None=…, width: int=…) -> None - added:
variable Outline: Callable[[], Image.core._Outline] | None
- removed:
method Draw.textsize(text, font) - changed:
constructor Brush(color, opacity=…) → constructor Brush(color: str, opacity: int=…) -> None - changed:
constructor Draw(image, size=…, color=…) → constructor Draw(image: Image.Image | str, size: tuple[int, int] | list[int] | None=…, color: float | tuple[float, ...] | str | None=…) -> None - changed:
constructor Font(color, file, size=…) → constructor Font(color: str, file: StrOrBytesPath | BinaryIO, size: float=…) -> None - changed:
constructor Pen(color, width=…, opacity=…) → constructor Pen(color: str, width: int=…, opacity: int=…) -> None - changed:
method Draw.flush() → method Draw.flush() -> Image.Image
- changed:
constructor Brightness(image) → constructor Brightness(image: Image.Image) -> None - changed:
constructor Color(image) → constructor Color(image: Image.Image) -> None - changed:
constructor Contrast(image) → constructor Contrast(image: Image.Image) -> None - changed:
constructor Sharpness(image) → constructor Sharpness(image: Image.Image) -> None
- removed:
property PyDecoder.pulls_fd - removed:
property PyEncoder.pushes_fd - changed:
constructor PyCodecState() → constructor PyCodecState() -> None - changed:
field Parser.image → field Parser.image: Image.Image | None - changed:
function raise_oserror(error) → function raise_oserror(error: int) -> OSError - changed:
method ImageFile.get_format_mimetype() → method ImageFile.get_format_mimetype() -> str | None - changed:
method ImageFile.load_end() → method ImageFile.load_end() -> None - changed:
method ImageFile.load_prepare() → method ImageFile.load_prepare() -> None - changed:
method ImageFile.verify() → method ImageFile.verify() -> None - changed:
method Parser.reset() → method Parser.reset() -> None - changed:
method PyCodec.cleanup() → method PyCodec.cleanup() -> None - changed:
method PyCodec.setimage(im, extents=…) → method PyCodec.setimage(im, extents: tuple[int, int, int, int] | None=…) -> None - changed:
method PyCodecState.extents() → method PyCodecState.extents() -> tuple[int, int, int, int] - changed:
method PyDecoder.decode(buffer) → method PyDecoder.decode(buffer: bytes) -> tuple[int, int] - changed:
method PyDecoder.set_as_raw(data, rawmode=…) → method PyDecoder.set_as_raw(data: bytes, rawmode=…) -> None - changed:
method PyEncoder.encode(bufsize) → method PyEncoder.encode(bufsize: int) -> tuple[int, int, bytes] - changed:
method PyEncoder.encode_to_pyfd() → method PyEncoder.encode_to_pyfd() -> tuple[int, int] - added:
class StubHandler - added:
field PyCodec.fd: IO[bytes] | None - added:
method StubHandler.load(im: StubImageFile) -> Image.Image - added:
method StubHandler.open(im: StubImageFile) -> None - added:
property PyDecoder.pulls_fd -> bool - added:
property PyEncoder.pushes_fd -> bool
- changed:
constructor BoxBlur(radius) → constructor BoxBlur(radius: float | Sequence[float]) -> None - changed:
constructor Color3DLUT(size, table, channels=…, target_mode=…, **kwargs) → constructor Color3DLUT(size: int | tuple[int, int, int], table: Sequence[float] | Sequence[Sequence[int]] | NumpyArray, channels: int=…, target_mode: str | None=…, **kwargs: bool) -> None - changed:
constructor GaussianBlur(radius=…) → constructor GaussianBlur(radius: float | Sequence[float]=…) -> None - changed:
constructor Kernel(size, kernel, scale=…, offset=…) → constructor Kernel(size: tuple[int, int], kernel: Sequence[float], scale: float | None=…, offset: float=…) -> None - changed:
constructor MaxFilter(size=…) → constructor MaxFilter(size: int=…) -> None - changed:
constructor MedianFilter(size=…) → constructor MedianFilter(size: int=…) -> None - changed:
constructor MinFilter(size=…) → constructor MinFilter(size: int=…) -> None - changed:
constructor ModeFilter(size=…) → constructor ModeFilter(size: int=…) -> None - changed:
constructor RankFilter(size, rank) → constructor RankFilter(size: int, rank: int) -> None - changed:
constructor UnsharpMask(radius=…, percent=…, threshold=…) → constructor UnsharpMask(radius: float=…, percent: int=…, threshold: int=…) -> None - changed:
method BoxBlur.filter(image) → method BoxBlur.filter(image: _imaging.ImagingCore) -> _imaging.ImagingCore - changed:
method BuiltinFilter.filter(image) → method BuiltinFilter.filter(image: _imaging.ImagingCore) -> _imaging.ImagingCore - changed:
method Color3DLUT.filter(image) → method Color3DLUT.filter(image: _imaging.ImagingCore) -> _imaging.ImagingCore - changed:
method Color3DLUT.transform(callback, with_normals=…, channels=…, target_mode=…) → method Color3DLUT.transform(callback: Callable[..., tuple[float, ...]], with_normals: bool=…, channels: int | None=…, target_mode: str | None=…) -> Color3DLUT - changed:
method GaussianBlur.filter(image) → method GaussianBlur.filter(image: _imaging.ImagingCore) -> _imaging.ImagingCore - changed:
method ModeFilter.filter(image) → method ModeFilter.filter(image: _imaging.ImagingCore) -> _imaging.ImagingCore - changed:
method RankFilter.filter(image) → method RankFilter.filter(image: _imaging.ImagingCore) -> _imaging.ImagingCore - changed:
method UnsharpMask.filter(image) → method UnsharpMask.filter(image: _imaging.ImagingCore) -> _imaging.ImagingCore - changed:
static method Color3DLUT.generate(size, callback, channels=…, target_mode=…) → static method Color3DLUT.generate(size: int | tuple[int, int, int], callback: Callable[[float, float, float], tuple[float, ...]], channels: int=…, target_mode: str | None=…) -> Color3DLUT - added:
field BuiltinFilter.filterargs: tuple[Any, ...] - added:
method Filter.filter(image: _imaging.ImagingCore) -> _imaging.ImagingCore
- removed:
method FreeTypeFont.getoffset(text) - removed:
method FreeTypeFont.getsize(text, direction=…, features=…, language=…, stroke_width=…) - removed:
method FreeTypeFont.getsize_multiline(text, direction=…, spacing=…, features=…, language=…, stroke_width=…) - removed:
method ImageFont.getsize(text, *args, **kwargs) - removed:
method TransposedFont.getsize(text, *args, **kwargs) - changed:
constructor FreeTypeFont(font=…, size=…, index=…, encoding=…, layout_engine=…) → constructor FreeTypeFont(font: StrOrBytesPath | BinaryIO | None=…, size: float=…, index: int=…, encoding: str=…, layout_engine: Layout | None=…) -> None - changed:
function load(filename) → function load(filename: str) -> ImageFont - changed:
function load_default() → function load_default(size: float | None=…) -> FreeTypeFont | ImageFont - changed:
function load_path(filename) → function load_path(filename: str | bytes) -> ImageFont - changed:
function truetype(font=…, size=…, index=…, encoding=…, layout_engine=…) → function truetype(font: StrOrBytesPath | BinaryIO | None=…, size: float=…, index: int=…, encoding: str=…, layout_engine: Layout | None=…) -> FreeTypeFont - changed:
method FreeTypeFont.get_variation_names() → method FreeTypeFont.get_variation_names() -> list[bytes] - changed:
method FreeTypeFont.getbbox(text, mode=…, direction=…, features=…, language=…, stroke_width=…, anchor=…) → method FreeTypeFont.getbbox(text: str | bytes, mode: str=…, direction: str | None=…, features: list[str] | None=…, language: str | None=…, stroke_width: float=…, anchor: str | None=…) -> tuple[float, float, float, float] - changed:
method FreeTypeFont.getlength(text, mode=…, direction=…, features=…, language=…) → method FreeTypeFont.getlength(text: str | bytes, mode=…, direction=…, features=…, language=…) -> float - changed:
method FreeTypeFont.getmask2(text, mode=…, fill=…, direction=…, features=…, language=…, stroke_width=…, anchor=…, ink=…, start=…, *args, **kwargs) → method FreeTypeFont.getmask2(text: str | bytes, mode=…, direction=…, features=…, language=…, stroke_width=…, anchor=…, ink=…, start=…, *args, **kwargs) - changed:
method FreeTypeFont.getmetrics() → method FreeTypeFont.getmetrics() -> tuple[int, int] - changed:
method FreeTypeFont.getname() → method FreeTypeFont.getname() -> tuple[str | None, str | None] - changed:
method FreeTypeFont.set_variation_by_axes(axes) → method FreeTypeFont.set_variation_by_axes(axes: list[float]) -> None - changed:
method ImageFont.getbbox(text, *args, **kwargs) → method ImageFont.getbbox(text: str | bytes | bytearray, *args: Any, **kwargs: Any) -> tuple[int, int, int, int] - changed:
method ImageFont.getlength(text, *args, **kwargs) → method ImageFont.getlength(text: str | bytes | bytearray, *args: Any, **kwargs: Any) -> int - changed:
method TransposedFont.getlength(text, *args, **kwargs) → method TransposedFont.getlength(text: str | bytes, *args, **kwargs) -> float - added:
field FreeTypeFont.font: Font - added:
field FreeTypeFont.font_bytes: bytes - added:
field ImageFont.font: ImagingFont - added:
function load_default_imagefont() -> ImageFont - added:
variable MAX_STRING_LENGTH - added:
variable core: ModuleType | DeferredError
- changed:
function grab(bbox=…, include_layered_windows=…, all_screens=…, xdisplay=…) → function grab(bbox: tuple[int, int, int, int] | None=…, include_layered_windows: bool=…, all_screens: bool=…, xdisplay: str | None=…) -> Image.Image - changed:
function grabclipboard() → function grabclipboard() -> Image.Image | list[str] | None
- changed:
function eval(expression, _dict=…, **kw) → function eval(expression: str, _dict: dict[str, Any]=…, **kw: Any) -> Any - changed:
function imagemath_convert(self, mode) → function imagemath_convert(self: _Operand, mode: str) -> _Operand - changed:
function imagemath_equal(self, other) → function imagemath_equal(self: _Operand, other: _Operand | float | None) -> _Operand - changed:
function imagemath_float(self) → function imagemath_float(self: _Operand) -> _Operand - changed:
function imagemath_int(self) → function imagemath_int(self: _Operand) -> _Operand - changed:
function imagemath_max(self, other) → function imagemath_max(self: _Operand, other: _Operand | float | None) -> _Operand - changed:
function imagemath_min(self, other) → function imagemath_min(self: _Operand, other: _Operand | float | None) -> _Operand - changed:
function imagemath_notequal(self, other) → function imagemath_notequal(self: _Operand, other: _Operand | float | None) -> _Operand - added:
function lambda_eval(expression: Callable[[dict[str, Any]], Any], options: dict[str, Any]=…, **kw: Any) -> Any - added:
function unsafe_eval(expression: str, options: dict[str, Any]=…, **kw: Any) -> Any
- removed:
constructor ModeDescriptor(mode, bands, basemode, basetype, typestr) - changed:
class ModeDescriptor → class ModeDescriptor(NamedTuple) - changed:
function getmode(mode) → function getmode(mode: str) -> ModeDescriptor - added:
field ModeDescriptor.bands: tuple[str, ...] - added:
field ModeDescriptor.basemode: str - added:
field ModeDescriptor.basetype: str - added:
field ModeDescriptor.mode: str - added:
field ModeDescriptor.typestr: str
- changed:
constructor LutBuilder(patterns=…, op_name=…) → constructor LutBuilder(patterns: list[str] | None=…, op_name: str | None=…) -> None - changed:
constructor MorphOp(lut=…, op_name=…, patterns=…) → constructor MorphOp(lut: bytearray | None=…, op_name: str | None=…, patterns: list[str] | None=…) -> None - changed:
method LutBuilder.add_patterns(patterns) → method LutBuilder.add_patterns(patterns: list[str]) -> None - changed:
method LutBuilder.build_default_lut() → method LutBuilder.build_default_lut() -> None - changed:
method LutBuilder.build_lut() → method LutBuilder.build_lut() -> bytearray - changed:
method LutBuilder.get_lut() → method LutBuilder.get_lut() -> bytearray | None - changed:
method MorphOp.apply(image) → method MorphOp.apply(image: Image.Image) -> tuple[int, Image.Image] - changed:
method MorphOp.get_on_pixels(image) → method MorphOp.get_on_pixels(image: Image.Image) -> list[tuple[int, int]] - changed:
method MorphOp.load_lut(filename) → method MorphOp.load_lut(filename: str) -> None - changed:
method MorphOp.match(image) → method MorphOp.match(image: Image.Image) -> list[tuple[int, int]] - changed:
method MorphOp.save_lut(filename) → method MorphOp.save_lut(filename: str) -> None - changed:
method MorphOp.set_lut(lut) → method MorphOp.set_lut(lut: bytearray | None) -> None
- changed:
function autocontrast(image, cutoff=…, ignore=…, mask=…, preserve_tone=…) → function autocontrast(image: Image.Image, cutoff: float | tuple[float, float]=…, ignore: int | Sequence[int] | None=…, mask: Image.Image | None=…, preserve_tone: bool=…) -> Image.Image - changed:
function colorize(image, black, white, mid=…, blackpoint=…, whitepoint=…, midpoint=…) → function colorize(image: Image.Image, black: str | tuple[int, ...], white: str | tuple[int, ...], mid: str | int | tuple[int, ...] | None=…, blackpoint: int=…, whitepoint: int=…, midpoint: int=…) -> Image.Image - changed:
function contain(image, size, method=…) → function contain(image: Image.Image, size: tuple[int, int], method: int=…) -> Image.Image - changed:
function crop(image, border=…) → function crop(image: Image.Image, border: int=…) -> Image.Image - changed:
function deform(image, deformer, resample=…) → function deform(image: Image.Image, deformer: SupportsGetMesh, resample: int=…) -> Image.Image - changed:
function equalize(image, mask=…) → function equalize(image: Image.Image, mask: Image.Image | None=…) -> Image.Image - changed:
function exif_transpose(image) → function exif_transpose(image: Image.Image, *, in_place: bool=…) -> Image.Image | None - changed:
function expand(image, border=…, fill=…) → function expand(image: Image.Image, border: int | tuple[int, ...]=…, fill: str | int | tuple[int, ...]=…) -> Image.Image - changed:
function fit(image, size, method=…, bleed=…, centering=…) → function fit(image: Image.Image, size: tuple[int, int], method: int=…, bleed: float=…, centering: tuple[float, float]=…) -> Image.Image - changed:
function flip(image) → function flip(image: Image.Image) -> Image.Image - changed:
function grayscale(image) → function grayscale(image: Image.Image) -> Image.Image - changed:
function invert(image) → function invert(image: Image.Image) -> Image.Image - changed:
function mirror(image) → function mirror(image: Image.Image) -> Image.Image - changed:
function pad(image, size, method=…, color=…, centering=…) → function pad(image: Image.Image, size: tuple[int, int], method: int=…, color: str | int | tuple[int, ...] | None=…, centering: tuple[float, float]=…) -> Image.Image - changed:
function posterize(image, bits) → function posterize(image: Image.Image, bits: int) -> Image.Image - changed:
function scale(image, factor, resample=…) → function scale(image: Image.Image, factor: float, resample: int=…) -> Image.Image - changed:
function solarize(image, threshold=…) → function solarize(image: Image.Image, threshold: int=…) -> Image.Image - added:
class SupportsGetMesh(Protocol) - added:
function cover(image: Image.Image, size: tuple[int, int], method: int=…) -> Image.Image - added:
method SupportsGetMesh.getmesh(image: Image.Image) -> list[tuple[tuple[int, int, int, int], tuple[int, int, int, int, int, int, int, int]]]
- removed:
property ImagePalette.colors - removed:
property ImagePalette.palette - changed:
constructor ImagePalette(mode=…, palette=…, size=…) → constructor ImagePalette(mode: str=…, palette: Sequence[int] | bytes | bytearray | None=…) -> None - changed:
function load(filename) → function load(filename: str) -> tuple[bytes, str] - changed:
function make_gamma_lut(exp) → function make_gamma_lut(exp: float) -> list[int] - changed:
function make_linear_lut(black, white) → function make_linear_lut(black: int, white: float) -> list[int] - changed:
function negative(mode=…) → function negative(mode: str=…) -> ImagePalette - changed:
function random(mode=…) → function random(mode: str=…) -> ImagePalette - changed:
function raw(rawmode, data) → function raw(rawmode, data: Sequence[int] | bytes | bytearray) -> ImagePalette - changed:
function sepia(white=…) → function sepia(white: str=…) -> ImagePalette - changed:
function wedge(mode=…) → function wedge(mode: str=…) -> ImagePalette - changed:
method ImagePalette.copy() → method ImagePalette.copy() -> ImagePalette - changed:
method ImagePalette.getcolor(color, image=…) → method ImagePalette.getcolor(color: tuple[int, ...], image: Image.Image | None=…) -> int - changed:
method ImagePalette.getdata() → method ImagePalette.getdata() -> tuple[str, Sequence[int] | bytes | bytearray] - changed:
method ImagePalette.save(fp) → method ImagePalette.save(fp: str | IO[str]) -> None - changed:
method ImagePalette.tobytes() → method ImagePalette.tobytes() -> bytes - added:
property ImagePalette.colors -> dict[tuple[int, ...], int] - added:
property ImagePalette.palette -> Sequence[int] | bytes | bytearray
- changed:
function toqimage(im) → function toqimage(im) -> ImageQt - added:
variable qt_version: str | None
- changed:
constructor Iterator(im) → constructor Iterator(im: Image.Image) - changed:
function all_frames(im, func=…) → function all_frames(im: Image.Image | list[Image.Image], func: Callable[[Image.Image], Image.Image] | None=…) -> list[Image.Image]
- changed:
field Viewer.format → field Viewer.format: str | None - changed:
field Viewer.options → field Viewer.options: dict[str, Any] - changed:
function register(viewer, order=…) → function register(viewer, order: int=…) -> None - changed:
function show(image, title=…, **options) → function show(image: Image.Image, title: str | None=…, **options: Any) -> bool - changed:
method DisplayViewer.get_command_ex(file, title=…, **options) → method DisplayViewer.get_command_ex(file: str, title: str | None=…, **options: Any) -> tuple[str, str] - changed:
method DisplayViewer.show_file(path=…, **options) → method DisplayViewer.show_file(path: str, **options: Any) -> int - changed:
method EogViewer.get_command_ex(file, **options) → method EogViewer.get_command_ex(file: str, **options: Any) -> tuple[str, str] - changed:
method EogViewer.show_file(path=…, **options) → method EogViewer.show_file(path: str, **options: Any) -> int - changed:
method GmDisplayViewer.get_command_ex(file, **options) → method GmDisplayViewer.get_command_ex(file: str, **options: Any) -> tuple[str, str] - changed:
method GmDisplayViewer.show_file(path=…, **options) → method GmDisplayViewer.show_file(path: str, **options: Any) -> int - changed:
method IPythonViewer.show_image(image, **options) → method IPythonViewer.show_image(image: Image.Image, **options: Any) -> int - changed:
method MacViewer.get_command(file, **options) → method MacViewer.get_command(file: str, **options: Any) -> str - changed:
method MacViewer.show_file(path=…, **options) → method MacViewer.show_file(path: str, **options: Any) -> int - changed:
method UnixViewer.get_command(file, **options) → method UnixViewer.get_command(file: str, **options: Any) -> str - changed:
method Viewer.get_command(file, **options) → method Viewer.get_command(file: str, **options: Any) -> str - changed:
method Viewer.get_format(image) → method Viewer.get_format(image: Image.Image) -> str | None - changed:
method Viewer.save_image(image) → method Viewer.save_image(image: Image.Image) -> str - changed:
method Viewer.show(image, **options) → method Viewer.show(image: Image.Image, **options: Any) -> int - changed:
method Viewer.show_file(path=…, **options) → method Viewer.show_file(path: str, **options: Any) -> int - changed:
method Viewer.show_image(image, **options) → method Viewer.show_image(image: Image.Image, **options: Any) -> int - changed:
method WindowsViewer.get_command(file, **options) → method WindowsViewer.get_command(file: str, **options: Any) -> str - changed:
method XDGViewer.get_command_ex(file, **options) → method XDGViewer.get_command_ex(file: str, **options: Any) -> tuple[str, str] - changed:
method XDGViewer.show_file(path=…, **options) → method XDGViewer.show_file(path: str, **options: Any) -> int - changed:
method XVViewer.get_command_ex(file, title=…, **options) → method XVViewer.get_command_ex(file: str, title: str | None=…, **options: Any) -> tuple[str, str] - changed:
method XVViewer.show_file(path=…, **options) → method XVViewer.show_file(path: str, **options: Any) -> int - added:
method UnixViewer.get_command_ex(file: str, **options: Any) -> tuple[str, str] - added:
method WindowsViewer.show_file(path: str, **options: Any) -> int
- changed:
constructor Stat(image_or_list, mask=…) → constructor Stat(image_or_list: Image.Image | list[int], mask: Image.Image | None=…) -> None - added:
property Stat.count -> list[int] - added:
property Stat.extrema -> list[tuple[int, int]] - added:
property Stat.mean -> list[float] - added:
property Stat.median -> list[int] - added:
property Stat.rms -> list[float] - added:
property Stat.stddev -> list[float] - added:
property Stat.sum -> list[float] - added:
property Stat.sum2 -> list[float] - added:
property Stat.var -> list[float]
- changed:
function getimage(photo) → function getimage(photo: PhotoImage) -> Image.Image - changed:
method BitmapImage.height() → method BitmapImage.height() -> int - changed:
method BitmapImage.width() → method BitmapImage.width() -> int - changed:
method PhotoImage.height() → method PhotoImage.height() -> int - changed:
method PhotoImage.paste(im, box=…) → method PhotoImage.paste(im: Image.Image) -> None - changed:
method PhotoImage.width() → method PhotoImage.width() -> int
- changed:
constructor Transform(data) → constructor Transform(data: Sequence[Any]) -> None - changed:
method Transform.getdata() → method Transform.getdata() -> tuple[Image.Transform, Sequence[int]] - changed:
method Transform.transform(size, image, **options) → method Transform.transform(size: tuple[int, int], image: Image.Image, **options: Any) -> Image.Image - added:
class PerspectiveTransform(Transform) - added:
field PerspectiveTransform.method - added:
field Transform.method: Image.Transform
- changed:
constructor Dib(image, size=…) → constructor Dib(image: Image.Image | str, size: tuple[int, int] | list[int] | None=…) -> None - changed:
constructor HDC(dc) → constructor HDC(dc: int) -> None - changed:
constructor HWND(wnd) → constructor HWND(wnd: int) -> None - changed:
constructor Window(title=…, width=…, height=…) → constructor Window(title: str=…, width: int | None=…, height: int | None=…) -> None - changed:
method Dib.frombytes(buffer) → method Dib.frombytes(buffer: bytes) -> None - changed:
method Dib.paste(im, box=…) → method Dib.paste(im: Image.Image, box: tuple[int, int, int, int] | None=…) -> None - changed:
method Dib.tobytes() → method Dib.tobytes() -> bytes - changed:
method Window.mainloop() → method Window.mainloop() -> None - changed:
method Window.ui_handle_destroy() → method Window.ui_handle_destroy() -> None
- removed:
variable PAD - changed:
function dump(c) → function dump(c: Sequence[int | bytes]) -> None - changed:
function i(c) → function i(c: bytes) -> int - changed:
method IptcImageFile.field() → method IptcImageFile.field() -> tuple[tuple[int, int] | None, int] - changed:
method IptcImageFile.getint(key) → method IptcImageFile.getint(key: tuple[int, int]) -> int
- changed:
method BoxReader.has_next_box() → method BoxReader.has_next_box() -> bool - changed:
method BoxReader.next_box_type() → method BoxReader.next_box_type() -> bytes - changed:
method BoxReader.read_boxes() → method BoxReader.read_boxes() -> BoxReader - changed:
method BoxReader.read_fields(field_format) → method BoxReader.read_fields(field_format: str) -> tuple[int | bytes, ...]
- removed:
function convert_dict_qtables(qtables) - removed:
method JpegImageFile.getxmp() - changed:
function COM(self, marker) → function COM(self: JpegImageFile, marker: int) -> None - changed:
function DQT(self, marker) → function DQT(self: JpegImageFile, marker: int) -> None - changed:
function SOF(self, marker) → function SOF(self: JpegImageFile, marker: int) -> None - changed:
function Skip(self, marker) → function Skip(self: JpegImageFile, marker: int) -> None - changed:
method JpegImageFile.draft(mode, size) → method JpegImageFile.draft(mode: str | None, size: tuple[int, int] | None) -> tuple[str, tuple[int, int, float, float]] | None - changed:
method JpegImageFile.load_djpeg() → method JpegImageFile.load_djpeg() -> None - changed:
method JpegImageFile.load_read(read_bytes) → method JpegImageFile.load_read(read_bytes: int) -> bytes
- changed:
method MicImageFile.close() → method MicImageFile.close() -> None - changed:
method MicImageFile.tell() → method MicImageFile.tell() -> int
- changed:
constructor BitStream(fp) → constructor BitStream(fp: SupportsRead[bytes]) -> None - changed:
method BitStream.next() → method BitStream.next() -> int - changed:
method BitStream.peek(bits) → method BitStream.peek(bits: int) -> int - changed:
method BitStream.read(bits) → method BitStream.read(bits: int) -> int - changed:
method BitStream.skip(bits) → method BitStream.skip(bits: int) -> None
- changed:
method MpoImageFile.load_seek(pos) → method MpoImageFile.load_seek(pos: int) -> None - changed:
method MpoImageFile.seek(frame) → method MpoImageFile.seek(frame: int) -> None - changed:
method MpoImageFile.tell() → method MpoImageFile.tell() -> int
- changed:
method MspDecoder.decode(buffer) → method MspDecoder.decode(buffer: bytes) -> tuple[int, int]
- changed:
method PSDraw.begin_document(id=…) → method PSDraw.begin_document(id: str | None=…) -> None - changed:
method PSDraw.end_document() → method PSDraw.end_document() -> None - changed:
method PSDraw.image(box, im, dpi=…) → method PSDraw.image(box: tuple[int, int, int, int], im: Image.Image, dpi: int | None=…) -> None - changed:
method PSDraw.line(xy0, xy1) → method PSDraw.line(xy0: tuple[int, int], xy1: tuple[int, int]) -> None - changed:
method PSDraw.rectangle(box) → method PSDraw.rectangle(box: tuple[int, int, int, int]) -> None - changed:
method PSDraw.setfont(font, size) → method PSDraw.setfont(font: str, size: int) -> None - changed:
method PSDraw.text(xy, text) → method PSDraw.text(xy: tuple[int, int], text: str) -> None
- changed:
constructor PaletteFile(fp) → constructor PaletteFile(fp: IO[bytes]) -> None - changed:
method PaletteFile.getpalette() → method PaletteFile.getpalette() -> tuple[bytes, str]
- changed:
function build_prototype_image() → function build_prototype_image() -> Image.Image
- changed:
method PcdImageFile.load_end() → method PcdImageFile.load_end() -> None
- changed:
constructor PcfFontFile(fp, charset_encoding=…) → constructor PcfFontFile(fp: BinaryIO, charset_encoding: str=…) - changed:
function sz(s, o) → function sz(s: bytes, o: int) -> bytes - changed:
variable BYTES_PER_ROW → variable BYTES_PER_ROW: list[Callable[[int], int]]
- changed:
class IndirectReference(collections.namedtuple('IndirectReferenceTuple', ['object_id', 'generation'])) → class IndirectReference(IndirectReferenceTuple) - changed:
class PdfArray(list) → class PdfArray(List[Any]) - changed:
class PdfDict(collections.UserDict) → class PdfDict(_DictBase) - changed:
function check_format_condition(condition, error_message) → function check_format_condition(condition: bool, error_message: str) -> None - changed:
function encode_text(s) → function encode_text(s: str) -> bytes - changed:
method PdfName.name_as_str() → method PdfName.name_as_str() -> str - changed:
method PdfParser.close() → method PdfParser.close() -> None - changed:
method PdfParser.close_buf() → method PdfParser.close_buf() -> None - changed:
method PdfParser.del_root() → method PdfParser.del_root() -> None - changed:
method PdfParser.read_pdf_info() → method PdfParser.read_pdf_info() -> None - changed:
method PdfParser.rewrite_pages() → method PdfParser.rewrite_pages() -> None - changed:
method PdfParser.seek_end() → method PdfParser.seek_end() -> None - changed:
method PdfParser.start_writing() → method PdfParser.start_writing() -> None - changed:
method PdfParser.write_catalog() → method PdfParser.write_catalog() -> IndirectReference - changed:
method PdfParser.write_header() → method PdfParser.write_header() -> None - added:
class IndirectReferenceTuple(NamedTuple) - added:
field IndirectReferenceTuple.generation: int - added:
field IndirectReferenceTuple.object_id: int
- removed:
method PngImageFile.getxmp() - changed:
constructor ChunkStream(fp) → constructor ChunkStream(fp: IO[bytes]) -> None - changed:
constructor PngInfo() → constructor PngInfo() -> None - changed:
method ChunkStream.close() → method ChunkStream.close() -> None - changed:
method ChunkStream.crc(cid, data) → method ChunkStream.crc(cid: bytes, data: bytes) -> None - changed:
method ChunkStream.crc_skip(cid, data) → method ChunkStream.crc_skip(cid: bytes, data: bytes) -> None - changed:
method ChunkStream.push(cid, pos, length) → method ChunkStream.push(cid: bytes, pos: int, length: int) -> None - changed:
method ChunkStream.read() → method ChunkStream.read() -> tuple[bytes, int, int] - changed:
method ChunkStream.verify(endchunk=…) → method ChunkStream.verify(endchunk: bytes=…) -> list[bytes] - changed:
method PngImageFile.getexif() → method PngImageFile.getexif() -> Image.Exif - changed:
method PngImageFile.load_end() → method PngImageFile.load_end() -> None - changed:
method PngImageFile.load_prepare() → method PngImageFile.load_prepare() -> None - changed:
method PngImageFile.load_read(read_bytes) → method PngImageFile.load_read(read_bytes: int) -> bytes - changed:
method PngImageFile.seek(frame) → method PngImageFile.seek(frame: int) -> None - changed:
method PngImageFile.tell() → method PngImageFile.tell() -> int - changed:
method PngImageFile.verify() → method PngImageFile.verify() -> None - changed:
method PngInfo.add(cid, data, after_idat=…) → method PngInfo.add(cid: bytes, data: bytes, after_idat: bool=…) -> None - changed:
method PngInfo.add_itxt(key, value, lang=…, tkey=…, zip=…) → method PngInfo.add_itxt(key: str | bytes, value: str | bytes, lang: str | bytes=…, tkey: str | bytes=…, zip: bool=…) -> None - changed:
method PngInfo.add_text(key, value, zip=…) → method PngInfo.add_text(key: str | bytes, value: str | bytes | iTXt, zip: bool=…) -> None - changed:
method PngStream.check_text_memory(chunklen) → method PngStream.check_text_memory(chunklen: int) -> None - changed:
method PngStream.chunk_IDAT(pos, length) → method PngStream.chunk_IDAT(pos: int, length: int) -> NoReturn - changed:
method PngStream.chunk_IEND(pos, length) → method PngStream.chunk_IEND(pos: int, length: int) -> NoReturn - changed:
method PngStream.chunk_IHDR(pos, length) → method PngStream.chunk_IHDR(pos: int, length: int) -> bytes - changed:
method PngStream.chunk_PLTE(pos, length) → method PngStream.chunk_PLTE(pos: int, length: int) -> bytes - changed:
method PngStream.chunk_acTL(pos, length) → method PngStream.chunk_acTL(pos: int, length: int) -> bytes - changed:
method PngStream.chunk_cHRM(pos, length) → method PngStream.chunk_cHRM(pos: int, length: int) -> bytes - changed:
method PngStream.chunk_eXIf(pos, length) → method PngStream.chunk_eXIf(pos: int, length: int) -> bytes - changed:
method PngStream.chunk_fcTL(pos, length) → method PngStream.chunk_fcTL(pos: int, length: int) -> bytes - changed:
method PngStream.chunk_fdAT(pos, length) → method PngStream.chunk_fdAT(pos: int, length: int) -> bytes - changed:
method PngStream.chunk_gAMA(pos, length) → method PngStream.chunk_gAMA(pos: int, length: int) -> bytes - changed:
method PngStream.chunk_iCCP(pos, length) → method PngStream.chunk_iCCP(pos: int, length: int) -> bytes - changed:
method PngStream.chunk_iTXt(pos, length) → method PngStream.chunk_iTXt(pos: int, length: int) -> bytes - changed:
method PngStream.chunk_pHYs(pos, length) → method PngStream.chunk_pHYs(pos: int, length: int) -> bytes - changed:
method PngStream.chunk_sRGB(pos, length) → method PngStream.chunk_sRGB(pos: int, length: int) -> bytes - changed:
method PngStream.chunk_tEXt(pos, length) → method PngStream.chunk_tEXt(pos: int, length: int) -> bytes - changed:
method PngStream.chunk_tRNS(pos, length) → method PngStream.chunk_tRNS(pos: int, length: int) -> bytes - changed:
method PngStream.chunk_zTXt(pos, length) → method PngStream.chunk_zTXt(pos: int, length: int) -> bytes - changed:
method PngStream.rewind() → method PngStream.rewind() -> None - changed:
method PngStream.save_rewind() → method PngStream.save_rewind() -> None - added:
field iTXt.lang: str | bytes | None - added:
field iTXt.tkey: str | bytes | None
- changed:
method PpmDecoder.decode(buffer) → method PpmDecoder.decode(buffer: bytes) -> tuple[int, int] - changed:
method PpmPlainDecoder.decode(buffer) → method PpmPlainDecoder.decode(buffer: bytes) -> tuple[int, int]
- changed:
method PsdImageFile.seek(layer) → method PsdImageFile.seek(layer: int) -> None - changed:
method PsdImageFile.tell() → method PsdImageFile.tell() -> int - added:
property PsdImageFile.is_animated -> bool - added:
property PsdImageFile.layers - added:
property PsdImageFile.n_frames -> int
- changed:
constructor PyAccess(img, readonly=…) → constructor PyAccess(img: Image.Image, readonly: bool=…) -> None - changed:
function new(img, readonly=…) → function new(img: Image.Image, readonly: bool=…) -> PyAccess | None - changed:
method PyAccess.check_xy(xy) → method PyAccess.check_xy(xy: tuple[int, int]) -> tuple[int, int] - added:
method PyAccess.get_pixel(x: int, y: int) -> float | tuple[int, ...] - added:
method PyAccess.set_pixel(x: int, y: int, color: float | tuple[int, ...] | list[int]) -> None - added:
variable FFI: type
- changed:
method QoiDecoder.decode(buffer) → method QoiDecoder.decode(buffer: bytes) -> tuple[int, int]
- changed:
method SGI16Decoder.decode(buffer) → method SGI16Decoder.decode(buffer: bytes) -> tuple[int, int]
- removed:
property SpiderImageFile.is_animated - removed:
property SpiderImageFile.n_frames - changed:
function isInt(f) → function isInt(f: Any) -> int - changed:
function isSpiderHeader(t) → function isSpiderHeader(t: tuple[float, ...]) -> int - changed:
function isSpiderImage(filename) → function isSpiderImage(filename: str) -> int - changed:
function loadImageSeries(filelist=…) → function loadImageSeries(filelist: list[str] | None=…) -> list[SpiderImageFile] | None - changed:
function makeSpiderHeader(im) → function makeSpiderHeader(im: Image.Image) -> list[bytes] - changed:
method SpiderImageFile.convert2byte(depth=…) → method SpiderImageFile.convert2byte(depth: int=…) -> Image.Image - changed:
method SpiderImageFile.seek(frame) → method SpiderImageFile.seek(frame: int) -> None - changed:
method SpiderImageFile.tell() → method SpiderImageFile.tell() -> int - changed:
method SpiderImageFile.tkPhotoImage() → method SpiderImageFile.tkPhotoImage() -> ImageTk.PhotoImage - added:
property SpiderImageFile.is_animated -> bool - added:
property SpiderImageFile.n_frames -> int
- changed:
class TarIO(ContainerIO.ContainerIO) → class TarIO(ContainerIO.ContainerIO[bytes]) - changed:
constructor TarIO(tarfile, file) → constructor TarIO(tarfile: str, file: str) -> None - changed:
method TarIO.close() → method TarIO.close() -> None
- changed:
method TgaImageFile.load_end() → method TgaImageFile.load_end() -> None
- removed:
field ImageFileDirectory_v2.legacy_api - removed:
method ImageFileDirectory_v2.legacy_api(value) - removed:
method TiffImageFile.getxmp() - changed:
class ImageFileDirectory_v2(MutableMapping) → class ImageFileDirectory_v2(_IFDv2Base) - changed:
constructor ImageFileDirectory_v2(ifh=…, prefix=…, group=…) → constructor ImageFileDirectory_v2(ifh: bytes=…, prefix: bytes | None=…, group: int | None=…) -> None - changed:
field ImageFileDirectory_v1.tagtype: dict → field ImageFileDirectory_v1.tagtype: dict[int, int] - changed:
method AppendingTiffWriter.close() → method AppendingTiffWriter.close() -> None - changed:
method AppendingTiffWriter.finalize() → method AppendingTiffWriter.finalize() -> None - changed:
method AppendingTiffWriter.fixIFD() → method AppendingTiffWriter.fixIFD() -> None - changed:
method AppendingTiffWriter.fixOffsets(count, isShort=…, isLong=…) → method AppendingTiffWriter.fixOffsets(count: int, isShort: bool=…, isLong: bool=…) -> None - changed:
method AppendingTiffWriter.goToEnd() → method AppendingTiffWriter.goToEnd() -> None - changed:
method AppendingTiffWriter.newFrame() → method AppendingTiffWriter.newFrame() -> None - changed:
method AppendingTiffWriter.readLong() → method AppendingTiffWriter.readLong() -> int - changed:
method AppendingTiffWriter.readShort() → method AppendingTiffWriter.readShort() -> int - changed:
method AppendingTiffWriter.rewriteLastLong(value) → method AppendingTiffWriter.rewriteLastLong(value: int) -> None - changed:
method AppendingTiffWriter.rewriteLastShort(value) → method AppendingTiffWriter.rewriteLastShort(value: int) -> None - changed:
method AppendingTiffWriter.rewriteLastShortToLong(value) → method AppendingTiffWriter.rewriteLastShortToLong(value: int) -> None - changed:
method AppendingTiffWriter.setEndian(endian) → method AppendingTiffWriter.setEndian(endian: str) -> None - changed:
method AppendingTiffWriter.setup() → method AppendingTiffWriter.setup() -> None - changed:
method AppendingTiffWriter.skipIFDs() → method AppendingTiffWriter.skipIFDs() -> None - changed:
method AppendingTiffWriter.tell() → method AppendingTiffWriter.tell() -> int - changed:
method AppendingTiffWriter.write(data) → method AppendingTiffWriter.write(data: bytes) -> int | None - changed:
method AppendingTiffWriter.writeLong(value) → method AppendingTiffWriter.writeLong(value: int) -> None - changed:
method AppendingTiffWriter.writeShort(value) → method AppendingTiffWriter.writeShort(value: int) -> None - changed:
method ImageFileDirectory_v1.to_v2() → method ImageFileDirectory_v1.to_v2() -> ImageFileDirectory_v2 - changed:
method ImageFileDirectory_v2.reset() → method ImageFileDirectory_v2.reset() -> None - changed:
method TiffImageFile.load_end() → method TiffImageFile.load_end() -> None - changed:
method TiffImageFile.seek(frame) → method TiffImageFile.seek(frame: int) -> None - changed:
method TiffImageFile.tell() → method TiffImageFile.tell() -> int - added:
property ImageFileDirectory_v2.legacy_api -> bool - added:
variable OSUBFILETYPE
- changed:
class TagInfo(namedtuple('_TagInfo', 'value name type length enum')) → class TagInfo(_TagInfo) - changed:
variable TAGS_V2 → variable TAGS_V2: dict[int, TagInfo] - changed:
variable TYPES → variable TYPES: dict[int, str]
- removed:
method WebPImageFile.getxmp() - changed:
method WebPImageFile.seek(frame) → method WebPImageFile.seek(frame: int) -> None - changed:
method WebPImageFile.tell() → method WebPImageFile.tell() -> int - added:
method WebPImageFile.load_seek(pos: int) -> None
- changed:
class WmfHandler → class WmfHandler(ImageFile.StubHandler) - changed:
function register_handler(handler) → function register_handler(handler: ImageFile.StubHandler | None) -> None - changed:
method WmfHandler.load(im) → method WmfHandler.load(im: ImageFile.StubImageFile) -> Image.Image - changed:
method WmfHandler.open(im) → method WmfHandler.open(im: ImageFile.StubImageFile) -> None
- changed:
method XpmImageFile.load_read(bytes) → method XpmImageFile.load_read(read_bytes: int) -> bytes
- changed:
function check(feature) → function check(feature: str) -> bool | None - changed:
function check_codec(feature) → function check_codec(feature: str) -> bool - changed:
function check_feature(feature) → function check_feature(feature: str) -> bool | None - changed:
function check_module(feature) → function check_module(feature: str) -> bool - changed:
function get_supported() → function get_supported() -> list[str] - changed:
function get_supported_codecs() → function get_supported_codecs() -> list[str] - changed:
function get_supported_features() → function get_supported_features() -> list[str] - changed:
function get_supported_modules() → function get_supported_modules() -> list[str] - changed:
function pilinfo(out=…, supported_formats=…) → function pilinfo(out: IO[str] | None=…, supported_formats: bool=…) -> None - changed:
function version(feature) → function version(feature: str) -> str | None - changed:
function version_codec(feature) → function version_codec(feature: str) -> str | None - changed:
function version_feature(feature) → function version_feature(feature: str) -> str | None - changed:
function version_module(feature) → function version_module(feature: str) -> str | None