This page lists Pillow features that are deprecated, or have been removed in past major releases, and gives the alternatives to use instead.
Below are features which are considered deprecated. Where appropriate, a :pyDeprecationWarning
is issued.
9.5.0
The :py~PIL.EpsImagePlugin.PSFile
class has been deprecated and will be 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.
10.0.0
Since Pillow's C API is now faster than PyAccess on PyPy, :py~PIL.PyAccess
has been deprecated and will be removed in Pillow 11.0.0 (2024-10-15). Pillow's C API will now be used by default on PyPy instead.
Image.USE_CFFI_ACCESS
, for switching from the C API to PyAccess, is similarly deprecated.
10.2.0
ImageFile.raise_oserror
has been deprecated and will be removed in Pillow 12.0.0 (2025-10-15). The function is undocumented and is only useful for translating error codes returned by internal codec APIs.
Deprecated features are only removed in major releases after an appropriate period of deprecation has passed.
8.2.0
10.0.0
Support for Tk/Tcl 8.4 was removed in Pillow 10.0.0 (2023-07-01).
8.2.0
10.0.0
im.category
was removed along with the related Image.NORMAL
, Image.SEQUENCE
and Image.CONTAINER
attributes.
To determine if an image has multiple frames or not, getattr(im, "is_animated", False)
can be used instead.
8.3.0
10.0.0
Since deprecation in Pillow 8.3.0, the convert_dict_qtables
method no longer performed any operations on the data given to it, and has been removed.
8.4.0
10.0.0
Before Pillow 8.3.0, ImagePalette
required palette data of particular lengths by default, and the size
parameter could be used to override that. Pillow 8.3.0 removed the default required length, also removing the need for the size
parameter.
9.1.0
10.0.0
The file
argument in :py~PIL.ImageShow.Viewer.show_file()
has been removed and replaced by path
.
In effect, viewer.show_file("test.jpg")
will continue to work unchanged.
9.1.0
10.0.0
A number of constants have been removed. Instead, enum.IntEnum
classes have been added.
Note
Additional Image
constants were deprecated in Pillow 9.1.0, but that was reversed in Pillow 9.4.0 and those constants will now remain available. See restored-image-constants
Removed | Use instead |
---|---|
Image.LINEAR |
Image.BILINEAR or Image.Resampling.BILINEAR |
Image.CUBIC |
Image.BICUBIC or Image.Resampling.BICUBIC |
Image.ANTIALIAS |
Image.LANCZOS or Image.Resampling.LANCZOS |
ImageCms.INTENT_PERCEPTUAL |
ImageCms.Intent.PERCEPTUAL |
ImageCms.INTENT_RELATIVE_COLORMETRIC |
ImageCms.Intent.RELATIVE_COLORMETRIC |
ImageCms.INTENT_SATURATION |
ImageCms.Intent.SATURATION |
ImageCms.INTENT_ABSOLUTE_COLORIMETRIC |
ImageCms.Intent.ABSOLUTE_COLORIMETRIC |
ImageCms.DIRECTION_INPUT |
ImageCms.Direction.INPUT |
ImageCms.DIRECTION_OUTPUT |
ImageCms.Direction.OUTPUT |
ImageCms.DIRECTION_PROOF |
ImageCms.Direction.PROOF |
ImageFont.LAYOUT_BASIC |
ImageFont.Layout.BASIC |
ImageFont.LAYOUT_RAQM |
ImageFont.Layout.RAQM |
BlpImagePlugin.BLP_FORMAT_JPEG |
BlpImagePlugin.Format.JPEG |
BlpImagePlugin.BLP_ENCODING_UNCOMPRESSED |
BlpImagePlugin.Encoding.UNCOMPRESSED |
BlpImagePlugin.BLP_ENCODING_DXT |
BlpImagePlugin.Encoding.DXT |
BlpImagePlugin.BLP_ENCODING_UNCOMPRESSED_RAW_RGBA |
BlpImagePlugin.Encoding.UNCOMPRESSED_RAW_RGBA |
BlpImagePlugin.BLP_ALPHA_ENCODING_DXT1 |
BlpImagePlugin.AlphaEncoding.DXT1 |
BlpImagePlugin.BLP_ALPHA_ENCODING_DXT3 |
BlpImagePlugin.AlphaEncoding.DXT3 |
BlpImagePlugin.BLP_ALPHA_ENCODING_DXT5 |
BlpImagePlugin.AlphaEncoding.DXT5 |
FtexImagePlugin.FORMAT_DXT1 |
FtexImagePlugin.Format.DXT1 |
FtexImagePlugin.FORMAT_UNCOMPRESSED |
FtexImagePlugin.Format.UNCOMPRESSED |
PngImagePlugin.APNG_DISPOSE_OP_NONE |
PngImagePlugin.Disposal.OP_NONE |
PngImagePlugin.APNG_DISPOSE_OP_BACKGROUND |
PngImagePlugin.Disposal.OP_BACKGROUND |
PngImagePlugin.APNG_DISPOSE_OP_PREVIOUS |
PngImagePlugin.Disposal.OP_PREVIOUS |
PngImagePlugin.APNG_BLEND_OP_SOURCE |
PngImagePlugin.Blend.OP_SOURCE |
PngImagePlugin.APNG_BLEND_OP_OVER |
PngImagePlugin.Blend.OP_OVER |
9.1.0
10.0.0
The stub image plugin FitsStubImagePlugin
has been removed. FITS images can be read without a handler through ~PIL.FitsImagePlugin
instead.
9.2.0
10.0.0
Several functions for computing the size and offset of rendered text have been removed:
Removed | Use instead |
---|---|
FreeTypeFont.getsize() and FreeTypeFont.getoffset() |
:py.FreeTypeFont.getbbox and :py.FreeTypeFont.getlength |
FreeTypeFont.getsize_multiline() |
:py.ImageDraw.multiline_textbbox |
ImageFont.getsize() |
:py.ImageFont.getbbox and :py.ImageFont.getlength |
TransposedFont.getsize() |
:py.TransposedFont.getbbox and :py.TransposedFont.getlength |
ImageDraw.textsize() and ImageDraw.multiline_textsize() |
:py.ImageDraw.textbbox , :py.ImageDraw.textlength and :py.ImageDraw.multiline_textbbox |
ImageDraw2.Draw.textsize() |
:py.ImageDraw2.Draw.textbbox and :py.ImageDraw2.Draw.textlength |
Previous code:
from PIL import Image, ImageDraw, ImageFont
font = ImageFont.truetype("Tests/fonts/FreeMono.ttf")
width, height = font.getsize("Hello world")
left, top = font.getoffset("Hello world")
im = Image.new("RGB", (100, 100))
draw = ImageDraw.Draw(im)
width, height = draw.textsize("Hello world")
width, height = font.getsize_multiline("Hello\nworld")
width, height = draw.multiline_textsize("Hello\nworld")
Use instead:
from PIL import Image, ImageDraw, ImageFont
font = ImageFont.truetype("Tests/fonts/FreeMono.ttf")
left, top, right, bottom = font.getbbox("Hello world")
width, height = right - left, bottom - top
im = Image.new("RGB", (100, 100))
draw = ImageDraw.Draw(im)
width = draw.textlength("Hello world")
left, top, right, bottom = draw.multiline_textbbox((0, 0), "Hello\nworld")
width, height = right - left, bottom - top
9.2.0
10.0.0
The undocumented fill
parameter of :py.FreeTypeFont.getmask2
has been removed.
9.2.0
10.0.0
The box
parameter was unused and has been removed.
9.2.0
10.0.0
Qt 5 reached end-of-life on 2020-12-08 for open-source users (and will reach EOL on 2023-12-08 for commercial licence holders).
Support for PyQt5 and PySide2 has been removed from ImageQt
. Upgrade to PyQt6 or PySide6 instead.
9.2.0
10.0.0
This undocumented method has been removed.
5.2.0
9.0.0
Use __version__
instead.
It was initially removed in Pillow 7.0.0, but temporarily brought back in 7.1.0 to give projects more time to upgrade.
7.2.0
9.0.0
The command
parameter has been removed. Use a subclass of :py.ImageShow.Viewer
instead.
7.2.0
9.0.0
Use :py.Image.Image.show
instead. If custom behaviour is required, use :py.ImageShow.register
to add a custom :py.ImageShow.Viewer
class.
7.2.0
9.0.0
:pyIOError
was merged into :pyOSError
in Python 3.3. So, ImageFile.raise_ioerror
has been removed. Use ImageFile.raise_oserror
instead.
8.1.0
9.0.0
Support for FreeType 2.7 has been removed.
We recommend upgrading to at least FreeType 2.10.4, which fixed a severe vulnerability introduced in FreeType 2.6 (2020-15999
).
1.1.2
8.0.0
im.offset()
has been removed, call :py.ImageChops.offset()
instead.
It was documented as deprecated in PIL 1.1.2, raised a :pyDeprecationWarning
since 1.1.5, an :pyException
since Pillow 3.0.0 and :pyNotImplementedError
since 3.3.0.
2.0.0
8.0.0
Image.fromstring()
has been removed, call :py.Image.frombytes()
instead.im.fromstring()
has been removed, call :py~PIL.Image.Image.frombytes()
instead.im.tostring()
has been removed, call :py~PIL.Image.Image.tobytes()
instead.
They issued a :pyDeprecationWarning
since 2.0.0, an :pyException
since 3.0.0 and :pyNotImplementedError
since 3.3.0.
3.2.0
8.0.0
Some attributes in :pyPIL.ImageCms.CmsProfile
have been removed. From 6.0.0, they issued a :pyDeprecationWarning
:
Removed | Use instead |
---|---|
color_space |
Padded :py~.CmsProfile.xcolor_space |
pcs |
Padded :py~.CmsProfile.connection_space |
product_copyright |
Unicode :py~.CmsProfile.copyright |
product_desc |
Unicode :py~.CmsProfile.profile_description |
product_description |
Unicode :py~.CmsProfile.profile_description |
product_manufacturer |
Unicode :py~.CmsProfile.manufacturer |
product_model |
Unicode :py~.CmsProfile.model |
6.0.0
7.0.0
Python 2.7 reached end-of-life on 2020-01-01. Pillow 6.x was the last series to support Python 2.
6.1.0
7.0.0
Implicitly closing the image's underlying file in Image.__del__
has been removed. Use a context manager or call Image.close()
instead to close the file in a deterministic way.
Previous method:
im = Image.open("hopper.png")
im.save("out.jpg")
Use instead:
with Image.open("hopper.png") as im:
im.save("out.jpg")
6.0.0
7.0.0
The version constants of individual plugins have been removed. Use PIL.__version__
instead.
Removed | Removed | Removed |
---|---|---|
BmpImagePlugin.__version__ |
Jpeg2KImagePlugin.__version__ |
PngImagePlugin.__version__ |
CurImagePlugin.__version__ |
JpegImagePlugin.__version__ |
PpmImagePlugin.__version__ |
DcxImagePlugin.__version__ |
McIdasImagePlugin.__version__ |
PsdImagePlugin.__version__ |
EpsImagePlugin.__version__ |
MicImagePlugin.__version__ |
SgiImagePlugin.__version__ |
FliImagePlugin.__version__ |
MpegImagePlugin.__version__ |
SunImagePlugin.__version__ |
FpxImagePlugin.__version__ |
MpoImagePlugin.__version__ |
TgaImagePlugin.__version__ |
GdImageFile.__version__ |
MspImagePlugin.__version__ |
TiffImagePlugin.__version__ |
GifImagePlugin.__version__ |
PalmImagePlugin.__version__ |
WmfImagePlugin.__version__ |
IcoImagePlugin.__version__ |
PcdImagePlugin.__version__ |
XbmImagePlugin.__version__ |
ImImagePlugin.__version__ |
PcxImagePlugin.__version__ |
XpmImagePlugin.__version__ |
|
|
|
6.0.0
7.0.0
Qt 4 reached end-of-life on 2015-12-19. Its Python bindings are also EOL: PyQt4 since 2018-08-31 and PySide since 2015-10-14.
Support for PyQt4 and PySide has been removed from ImageQt
. Please upgrade to PyQt5 or PySide2.
5.3.0
7.0.0
Setting the size of a TIFF image directly (eg. im.size = (256, 256)
) throws an error. Use Image.resize
instead.
5.2.0
6.0.0
VERSION
(the old PIL version, always 1.1.7) has been removed. Use __version__
instead.
4.3.0
6.0.0
Several undocumented functions in ImageOps
have been removed. Use the equivalents in ImageFilter
instead:
Removed | Use instead |
---|---|
ImageOps.box_blur |
ImageFilter.BoxBlur |
ImageOps.gaussian_blur |
ImageFilter.GaussianBlur |
ImageOps.gblur |
ImageFilter.GaussianBlur |
ImageOps.usm |
ImageFilter.UnsharpMask |
ImageOps.unsharp_mask |
ImageFilter.UnsharpMask |
4.0.0
6.0.0
PIL.OleFileIO
was removed as a vendored file in Pillow 4.0.0 (2017-01) in favour of the upstream olefile
Python package, and replaced with an :pyImportError
in 5.0.0 (2018-01). The deprecated file has now been removed from Pillow. If needed, install from PyPI (eg. python3 -m pip install olefile
).