11.0.0 (2024-10-15)

Backwards Incompatible Changes

Python 3.8

Pillow has dropped support for Python 3.8, which reached end-of-life in October 2024.

Python 3.12 on macOS <= 10.12

The latest version of Python 3.12 only supports macOS versions 10.13 and later, and so Pillow has also updated the deployment target for its prebuilt Python 3.12 wheels.

PSFile

The PSFile class was removed in Pillow 11 (2024-10-15). This class was only made as a helper to be used internally, so there is no replacement. If you need this functionality though, it is a very short class that can easily be recreated in your own code.

PyAccess and Image.USE_CFFI_ACCESS

Since Pillow’s C API is now faster than PyAccess on PyPy, PyAccess has been removed. Pillow’s C API will now be used on PyPy instead.

Image.USE_CFFI_ACCESS, for switching from the C API to PyAccess, was similarly removed.

TiffImagePlugin IFD_LEGACY_API

An unused setting, TiffImagePlugin.IFD_LEGACY_API, has been removed.

WebP 0.4

Support for WebP 0.4 and earlier has been removed; WebP 0.5 is the minimum supported.

Deprecations

FreeType 2.9.0

Deprecated since version 11.0.0.

Support for FreeType 2.9.0 is deprecated and will be removed in Pillow 12.0.0 (2025-10-15), when FreeType 2.9.1 will be the minimum supported.

We recommend upgrading to at least FreeType 2.10.4, which fixed a severe vulnerability introduced in FreeType 2.6 (CVE 2020-15999).

Get internal pointers to objects

Deprecated since version 11.0.0.

Image.core.ImagingCore.id and Image.core.ImagingCore.unsafe_ptrs have been deprecated and will be removed in Pillow 12 (2025-10-15). They were used for obtaining raw pointers to ImagingCore internals. To interact with C code, you can use Image.Image.getim(), which returns a Capsule object.

ICNS (width, height, scale) sizes

Deprecated since version 11.0.0.

Setting an ICNS image size to (width, height, scale) before loading has been deprecated. Instead, load(scale) can be used.

Image isImageType()

Deprecated since version 11.0.0.

Image.isImageType(im) has been deprecated. Use isinstance(im, Image.Image) instead.

ImageMath.lambda_eval and ImageMath.unsafe_eval options parameter

Deprecated since version 11.0.0.

The options parameter in lambda_eval() and unsafe_eval() has been deprecated. One or more keyword arguments can be used instead.

JpegImageFile.huffman_ac and JpegImageFile.huffman_dc

Deprecated since version 11.0.0.

The huffman_ac and huffman_dc dictionaries on JPEG images were unused. They have been deprecated, and will be removed in Pillow 12 (2025-10-15).

Specific WebP Feature Checks

Deprecated since version 11.0.0.

features.check("transp_webp"), features.check("webp_mux") and features.check("webp_anim") are now deprecated. They will always return True if the WebP module is installed, until they are removed in Pillow 12.0.0 (2025-10-15).

API Changes

Default resampling filter for I;16* image modes

The default resampling filter for I;16, I;16L, I;16B and I;16N has been changed from Image.NEAREST to Image.BICUBIC, to match the majority of modes.

API Additions

Writing XMP bytes to JPEG and MPO

XMP data can now be saved to JPEG files using an xmp argument:

im.save("out.jpg", xmp=b"test")

The data can also be set through info, for use when saving either JPEG or MPO images:

im.info["xmp"] = b"test"
im.save("out.jpg")

Other Changes

Python 3.13

Pillow 10.4.0 had wheels built against Python 3.13 beta, available as a preview to help others prepare for 3.13, and to ensure Pillow could be used immediately at the release of 3.13.0 final (2024-10-07, PEP 719).

Pillow 11.0.0 now officially supports Python 3.13.

Support has also been added for the experimental free-threaded mode of PEP 703.

Python 3.13 only supports macOS versions 10.13 and later.

C-level Flags

Some compiling flags like WITH_THREADING, WITH_IMAGECHOPS, and other WITH_* were removed. These flags were not available through the build system, but they could be edited in the C source.