TODO
TODO
Pillow has dropped support for Python 3.10, which reached end-of-life in October 2026.
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")
Using the mode parameter in :py:meth:`~PIL.Image.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() 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 :py:class:`PIL.ImageFile.ImageFile`
instance.
Image._show has been removed. Use :py:meth:`~PIL.ImageShow.show` instead.
ImageCms.ImageCmsProfile.product_name and the corresponding
.product_info attributes have been removed. They were set to None since Pillow
2.3.0.
ExifTags.IFD.Makernote has been removed. Instead, use ExifTags.IFD.MakerNote.
The IM image format has been deprecated and removal is planned in Pillow 15.0.0 (2028-10-15). If you are using this format and would like to continue doing so, open an issue about what other software uses it.
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() has been deprecated. This was an undocumented helper function
intended for internal use, so there is no replacement.
TODO
:py:meth:`~PIL.Image.Image.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.
Two new filters are available for :py:meth:`~PIL.Image.Image.resize` and
:py:meth:`~PIL.Image.Image.thumbnail`: Image.Resampling.MKS2013 and
Image.Resampling.MKS2021. These are versions of the Magic Kernel Sharp filter.
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.
:py:meth:`~PIL.ImageChops.offset` now works correctly for 16-bit-per-channel images.