Skip to content
Back to top
View this page

# 11.0.0

## 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.