API Changes#

Setting image mode#

If you attempt to set the mode of an image directly, e.g. im.mode = "RGBA", you will now receive an AttributeError. This is not about removing existing functionality, but instead about raising an explicit error to prevent later consequences. The convert method is the correct way to change an image’s mode.

Accept a list in getpixel()#

getpixel() now accepts a list of coordinates, as well as a tuple.

from PIL import Image
im = Image.new("RGB", (1, 1))
im.getpixel((0, 0))
im.getpixel([0, 0])

BoxBlur and GaussianBlur allow for different x and y radii#

BoxBlur and GaussianBlur now allow a sequence of x and y radii to be specified, rather than a single number for both dimensions.

from PIL import ImageFilter
ImageFilter.BoxBlur((2, 5))
ImageFilter.GaussianBlur((2, 5))

API Additions#


EpsImagePlugin.gs_windows_binary stores the name of the Ghostscript executable on Windows. EpsImagePlugin.gs_binary has now been added for all platforms, and can be used to customise the name of the executable, or disable use entirely through EpsImagePlugin.gs_binary = False.


Images now have has_transparency_data to indicate whether the image has transparency data, whether in the form of an alpha channel, a palette with an alpha channel, or a “transparency” key in the info dictionary.

Even if this attribute is true, the image might still appear solid, if all of the values shown within are opaque.


Returns a resized version of the image, so that the requested size is covered, while maintaining the original aspect ratio.

See Resize relative to a given size for a comparison between this and similar ImageOps methods.

size and font_size arguments when using default font#

Pillow has had a “better than nothing” default font, which can only be drawn at one font size. Now, if FreeType support is available, a version of Aileron Regular is loaded, which can be drawn at chosen font sizes.

The following size and font_size arguments can now be used to specify a font size for this new builtin font:

draw.text((0, 0), "test", font_size=24)
draw.textlength((0, 0), "test", font_size=24)
draw.textbbox((0, 0), "test", font_size=24)
draw.multiline_text((0, 0), "test", font_size=24)
draw.multiline_textbbox((0, 0), "test", font_size=24)

Other Changes#

Python 3.12#

Pillow 10.0.0 had wheels built against Python 3.12 beta, available as a preview to help others prepare for 3.12, and to ensure Pillow could be used immediately at the release of 3.12.0 final (2023-10-02, PEP 693).

Pillow 10.1.0 now officially supports Python 3.12.

Added support for DDS BC5U and 8-bit color indexed images#

Support has been added to read BC5U DDS files as RGB images, and PALETTEINDEXED8 DDS files as P mode images.

Support reading signed 8-bit YCbCr TIFF images#

TIFF images with unsigned integer data, 8 bits per sample and a photometric interpretation of YCbCr can now be read.