13.0.0 (unreleased)¶
Security¶
TODO¶
TODO
CVE YYYY-XXXXX: TODO¶
TODO
Backwards incompatible changes¶
Python 3.10¶
Pillow has dropped support for Python 3.10, which reached end-of-life in October 2026.
Saving I mode images as PNG¶
In order to fit the 32 bits of I mode images into PNG, when PNG images can only contain at most 16 bits for a channel, Pillow has been clipping the values. Rather than quietly changing the data, this is now removed. Instead, the image can be converted to another mode before saving:
from PIL import Image
im = Image.new("I", (1, 1))
im.convert("I;16").save("out.png")
Image.fromarray mode parameter¶
Using the mode parameter in fromarray() was deprecated in
Pillow 11.3.0. In Pillow 12.0.0, this was partially reverted, and now the only
functionality removed is when the mode changes data types. Since pixel values do not
contain information about palettes or color spaces, the parameter can still be used to
place grayscale L mode data within a P mode image, or read RGB data as YCbCr for
example. If omitted, the mode will be automatically determined from the object’s shape
and type.
Image.Image.get_child_images()¶
Image.Image.get_child_images() has been moved to
ImageFile.ImageFile.get_child_images(). The method uses an image’s file pointer,
and so child images could only be retrieved from an PIL.ImageFile.ImageFile
instance.
Image._show¶
Image._show has been removed. Use show() instead.
ImageCms.ImageCmsProfile.product_name and .product_info¶
ImageCms.ImageCmsProfile.product_name and the corresponding
.product_info attributes have been removed. They were set to None since Pillow
2.3.0.
Deprecations¶
JpegImageFile.load_djpeg¶
JpegImageFile.load_djpeg has been deprecated, and will be removed in Pillow 14
(2027-10-15).
Use the built-in JPEG decoder instead, or call djpeg directly and decode the
resulting image with Pillow.
ImageQt align8to32()¶
ImageQt.align8to32() has been deprecated. This was an undocumented helper function
intended for internal use, so there is no replacement.
API changes¶
TODO¶
TODO
API additions¶
Added strip_namespaces argument to Image.getxmp()¶
getxmp() now accepts an optional keyword argument of
strip_namespaces. It is set to True by default, stripping each tag’s XML
namespace URI prefix as before. If set to False, each tag’s full
{namespace-uri}local-name form is kept instead, avoiding collisions between tags
that share a local name across different namespaces.
New resizing filters¶
Two new filters are available for resize() and
thumbnail(): Image.Resampling.MKS2013 and
Image.Resampling.MKS2021. These are versions of the Magic Kernel Sharp filter.
Other changes¶
Python 3.15¶
Pillow 12.3.0 had wheels built against Python 3.15 beta, available as a preview to help projects prepare for 3.15, and to ensure Pillow could be used immediately at the release of 3.15.0 final (2026-10-01, PEP 790).
Pillow 13.0.0 now officially supports Python 3.15.