2018-12-06 11:56:07 +03:00
.. _deprecations:
Deprecations and removals
=========================
This page lists Pillow features that are deprecated, or have been removed in
past major releases, and gives the alternatives to use instead.
Deprecated features
-------------------
Below are features which are considered deprecated. Where appropriate,
a `` DeprecationWarning `` is issued.
2021-06-30 13:57:21 +03:00
Tk/Tcl 8.4
~~~~~~~~~~
.. deprecated :: 8.2.0
2021-10-18 15:48:49 +03:00
Support for Tk/Tcl 8.4 is deprecated and will be removed in Pillow 10.0.0 (2023-07-01),
2021-06-30 13:57:21 +03:00
when Tk/Tcl 8.5 will be the minimum supported.
Categories
~~~~~~~~~~
.. deprecated :: 8.2.0
2021-10-18 15:48:49 +03:00
`` im.category `` is deprecated and will be removed in Pillow 10.0.0 (2023-07-01),
2021-06-30 13:57:21 +03:00
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.
2021-06-30 14:47:41 +03:00
JpegImagePlugin.convert_dict_qtables
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. deprecated :: 8.3.0
JPEG `` quantization `` is now automatically converted, but still returned as a
dictionary. The :py:attr: `~PIL.JpegImagePlugin.convert_dict_qtables` method no longer
performs any operations on the data given to it, has been deprecated and will be
2021-10-18 15:48:49 +03:00
removed in Pillow 10.0.0 (2023-07-01).
2021-06-30 14:47:41 +03:00
2021-07-29 09:19:53 +03:00
ImagePalette size parameter
~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. deprecated :: 8.4.0
2021-10-18 15:48:49 +03:00
The `` size `` parameter will be removed in Pillow 10.0.0 (2023-07-01).
2021-07-29 09:19:53 +03:00
2021-07-29 09:49:09 +03:00
Before Pillow 8.3.0, `` ImagePalette `` required palette data of particular lengths by
2021-07-29 09:19:53 +03:00
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.
2022-01-16 03:38:34 +03:00
ImageShow.Viewer.show_file file argument
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. deprecated :: 9.1.0
The `` file `` argument in :py:meth: `~PIL.ImageShow.Viewer.show_file()` has been
2022-01-26 01:08:41 +03:00
deprecated and will be removed in Pillow 10.0.0 (2023-07-01). It has been replaced by
`` path `` .
2022-01-16 03:38:34 +03:00
In effect, `` viewer.show_file("test.jpg") `` will continue to work unchanged.
`` viewer.show_file(file="test.jpg") `` will raise a deprecation warning, and suggest
`` viewer.show_file(path="test.jpg") `` instead.
2022-02-18 14:13:11 +03:00
Constants
~~~~~~~~~
2022-04-01 20:43:35 +03:00
.. deprecated :: 9.1.0
2022-02-18 14:13:11 +03:00
A number of constants have been deprecated and will be removed in Pillow 10.0.0
(2023-07-01). Instead, `` enum.IntEnum `` classes have been added.
2022-12-29 05:55:13 +03:00
.. note ::
2022-12-31 01:43:36 +03:00
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 :ref: `restored-image-constants`
2022-12-29 05:55:13 +03:00
2022-02-18 14:13:11 +03:00
===================================================== ============================================================
Deprecated Use instead
===================================================== ============================================================
2022-12-28 01:44:53 +03:00
`` Image.LINEAR `` `` Image.BILINEAR `` or `` Image.Resampling.BILINEAR ``
`` Image.CUBIC `` `` Image.BICUBIC `` or `` Image.Resampling.BICUBIC ``
`` Image.ANTIALIAS `` `` Image.LANCZOS `` or `` Image.Resampling.LANCZOS ``
2022-02-18 14:13:11 +03:00
`` 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 ``
===================================================== ============================================================
2022-02-19 06:41:12 +03:00
FitsStubImagePlugin
~~~~~~~~~~~~~~~~~~~
.. deprecated :: 9.1.0
2022-02-21 00:03:50 +03:00
The stub image plugin `` FitsStubImagePlugin `` has been deprecated and will be removed in
2022-02-19 06:41:12 +03:00
Pillow 10.0.0 (2023-07-01). FITS images can be read without a handler through
2022-02-20 15:57:17 +03:00
:mod: `~PIL.FitsImagePlugin` instead.
2022-02-19 06:41:12 +03:00
2022-04-22 12:06:20 +03:00
FreeTypeFont.getmask2 fill parameter
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. deprecated :: 9.2.0
The undocumented `` fill `` parameter of :py:meth: `.FreeTypeFont.getmask2` has been
deprecated and will be removed in Pillow 10 (2023-07-01).
2022-04-02 23:15:42 +03:00
PhotoImage.paste box parameter
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. deprecated :: 9.2.0
The `` box `` parameter is unused. It will be removed in Pillow 10.0.0 (2023-07-01).
2022-05-17 10:31:18 +03:00
Image.coerce_e
~~~~~~~~~~~~~~
.. deprecated :: 9.2.0
This undocumented method has been deprecated and will be removed in Pillow 10
(2023-07-01).
2022-09-05 23:43:52 +03:00
.. _Font size and offset methods:
2022-06-30 14:58:47 +03:00
Font size and offset methods
2022-06-30 15:51:29 +03:00
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2022-06-30 14:58:47 +03:00
.. deprecated :: 9.2.0
2022-06-30 16:29:09 +03:00
Several functions for computing the size and offset of rendered text
have been deprecated and will be removed in Pillow 10 (2023-07-01):
2022-06-30 14:58:47 +03:00
=========================================================================== =============================================================================================================
Deprecated Use instead
=========================================================================== =============================================================================================================
:py:meth: `.FreeTypeFont.getsize` and :py:meth: `.FreeTypeFont.getoffset` :py:meth: `.FreeTypeFont.getbbox` and :py:meth: `.FreeTypeFont.getlength`
:py:meth: `.FreeTypeFont.getsize_multiline` :py:meth: `.ImageDraw.multiline_textbbox`
:py:meth: `.ImageFont.getsize` :py:meth: `.ImageFont.getbbox` and :py:meth: `.ImageFont.getlength`
:py:meth: `.TransposedFont.getsize` :py:meth: `.TransposedFont.getbbox` and :py:meth: `.TransposedFont.getlength`
:py:meth: `.ImageDraw.textsize` and :py:meth: `.ImageDraw.multiline_textsize` :py:meth: `.ImageDraw.textbbox` , :py:meth: `.ImageDraw.textlength` and :py:meth: `.ImageDraw.multiline_textbbox`
2022-06-30 15:38:20 +03:00
:py:meth: `.ImageDraw2.Draw.textsize` :py:meth: `.ImageDraw2.Draw.textbbox` and :py:meth: `.ImageDraw2.Draw.textlength`
2022-06-30 14:58:47 +03:00
=========================================================================== =============================================================================================================
2023-02-18 12:34:52 +03:00
Previous code::
2022-09-03 15:23:05 +03:00
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")
2023-02-18 12:34:52 +03:00
Use instead::
2022-09-03 15:23:05 +03:00
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
2023-03-29 18:30:20 +03:00
PSFile
~~~~~~
.. deprecated :: 9.5.0
The :py:class: `~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.
2020-07-09 13:19:19 +03:00
Removed features
----------------
Deprecated features are only removed in major releases after an appropriate
period of deprecation has passed.
2023-04-02 00:27:22 +03:00
PyQt5 and PySide2
~~~~~~~~~~~~~~~~~
.. deprecated :: 9.2.0
.. versionremoved :: 10.0.0
`Qt 5 reached end-of-life <https://www.qt.io/blog/qt-5.15-released> `_ 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 <https://www.riverbankcomputing.com/static/Docs/PyQt6/> `_ or
`PySide6 <https://doc.qt.io/qtforpython/> `_ instead.
2021-10-18 09:20:56 +03:00
PILLOW_VERSION constant
~~~~~~~~~~~~~~~~~~~~~~~
.. deprecated :: 5.2.0
.. versionremoved :: 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.
2021-10-18 03:08:51 +03:00
Image.show command parameter
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. deprecated :: 7.2.0
.. versionremoved :: 9.0.0
The `` command `` parameter has been removed. Use a subclass of
:py:class: `.ImageShow.Viewer` instead.
2021-10-18 02:53:48 +03:00
Image._showxv
~~~~~~~~~~~~~
.. deprecated :: 7.2.0
.. versionremoved :: 9.0.0
Use :py:meth: `.Image.Image.show` instead. If custom behaviour is required, use
:py:func: `.ImageShow.register` to add a custom :py:class: `.ImageShow.Viewer` class.
2021-10-18 02:53:16 +03:00
ImageFile.raise_ioerror
~~~~~~~~~~~~~~~~~~~~~~~
.. deprecated :: 7.2.0
.. versionremoved :: 9.0.0
`` IOError `` was merged into `` OSError `` in Python 3.3.
So, `` ImageFile.raise_ioerror `` has been removed.
Use `` ImageFile.raise_oserror `` instead.
2021-10-17 23:29:41 +03:00
FreeType 2.7
~~~~~~~~~~~~
.. deprecated :: 8.1.0
.. versionremoved :: 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
2023-03-08 19:07:14 +03:00
vulnerability introduced in FreeType 2.6 (:cve: `2020-15999` ).
2021-10-17 23:29:41 +03:00
2022-09-23 15:13:50 +03:00
.. _FreeType: https://freetype.org/
2021-10-17 23:29:41 +03:00
2020-07-17 10:55:20 +03:00
im.offset
~~~~~~~~~
.. deprecated :: 1.1.2
.. versionremoved :: 8.0.0
2020-08-09 20:08:38 +03:00
`` im.offset() `` has been removed, call :py:func: `.ImageChops.offset()` instead.
2020-07-17 10:55:20 +03:00
It was documented as deprecated in PIL 1.1.2,
raised a `` DeprecationWarning `` since 1.1.5,
an `` Exception `` since Pillow 3.0.0
and `` NotImplementedError `` since 3.3.0.
2020-07-21 15:55:32 +03:00
Image.fromstring, im.fromstring and im.tostring
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2020-07-17 10:55:20 +03:00
.. deprecated :: 2.0.0
.. versionremoved :: 8.0.0
2020-07-18 10:09:15 +03:00
* `` Image.fromstring() `` has been removed, call :py:func: `.Image.frombytes()` instead.
* `` im.fromstring() `` has been removed, call :py:meth: `~PIL.Image.Image.frombytes()` instead.
* `` im.tostring() `` has been removed, call :py:meth: `~PIL.Image.Image.tobytes()` instead.
2020-07-17 10:55:20 +03:00
They issued a `` DeprecationWarning `` since 2.0.0,
an `` Exception `` since 3.0.0
and `` NotImplementedError `` since 3.3.0.
2019-01-28 15:30:27 +03:00
ImageCms.CmsProfile attributes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. deprecated :: 3.2.0
2020-07-09 13:19:19 +03:00
.. versionremoved :: 8.0.0
2019-01-28 15:30:27 +03:00
2020-08-09 20:08:38 +03:00
Some attributes in :py:class: `PIL.ImageCms.CmsProfile` have been removed. From 6.0.0,
they issued a `` DeprecationWarning `` :
2019-01-28 15:30:27 +03:00
2020-08-09 22:48:44 +03:00
======================== ===================================================
2020-07-09 13:19:19 +03:00
Removed Use instead
2020-08-09 22:48:44 +03:00
======================== ===================================================
2020-08-09 21:44:51 +03:00
`` color_space `` Padded :py:attr: `~.CmsProfile.xcolor_space`
`` pcs `` Padded :py:attr: `~.CmsProfile.connection_space`
`` product_copyright `` Unicode :py:attr: `~.CmsProfile.copyright`
`` product_desc `` Unicode :py:attr: `~.CmsProfile.profile_description`
`` product_description `` Unicode :py:attr: `~.CmsProfile.profile_description`
`` product_manufacturer `` Unicode :py:attr: `~.CmsProfile.manufacturer`
`` product_model `` Unicode :py:attr: `~.CmsProfile.model`
2020-08-09 22:48:44 +03:00
======================== ===================================================
2019-01-28 15:30:27 +03:00
2019-12-31 15:12:01 +03:00
Python 2.7
~~~~~~~~~~
2020-07-09 12:46:44 +03:00
.. deprecated :: 6.0.0
2020-07-09 12:24:23 +03:00
.. versionremoved :: 7.0.0
2019-12-31 15:12:01 +03:00
Python 2.7 reached end-of-life on 2020-01-01. Pillow 6.x was the last series to
support Python 2.
2019-11-01 14:42:12 +03:00
Image.__del__
~~~~~~~~~~~~~
2020-07-09 12:46:44 +03:00
.. deprecated :: 6.1.0
2020-07-09 12:24:23 +03:00
.. versionremoved :: 7.0.0
2019-11-01 14:42:12 +03:00
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.
2023-02-18 12:34:52 +03:00
Previous method::
2019-11-01 14:42:12 +03:00
im = Image.open("hopper.png")
im.save("out.jpg")
2023-02-18 12:34:52 +03:00
Use instead::
2019-11-01 14:42:12 +03:00
with Image.open("hopper.png") as im:
im.save("out.jpg")
2019-11-05 18:00:51 +03:00
PIL.*ImagePlugin.__version__ attributes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2020-07-09 12:46:44 +03:00
.. deprecated :: 6.0.0
2020-07-09 12:24:23 +03:00
.. versionremoved :: 7.0.0
2019-11-05 18:00:51 +03:00
The version constants of individual plugins have been removed. Use `` PIL.__version__ ``
instead.
=============================== ================================= ==================================
2019-11-05 23:04:04 +03:00
Removed Removed Removed
2019-11-05 18:00:51 +03:00
=============================== ================================= ==================================
`` 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__ ``
`` ImtImagePlugin.__version__ `` `` PdfImagePlugin.__version__ `` `` XVThumbImagePlugin.__version__ ``
`` IptcImagePlugin.__version__ `` `` PixarImagePlugin.__version__ ``
=============================== ================================= ==================================
2019-09-26 21:38:19 +03:00
PyQt4 and PySide
~~~~~~~~~~~~~~~~
2020-07-09 12:46:44 +03:00
.. deprecated :: 6.0.0
2020-07-09 12:24:23 +03:00
.. versionremoved :: 7.0.0
2019-09-26 21:38:19 +03:00
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.
2019-10-03 15:12:28 +03:00
Setting the size of TIFF images
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2020-07-09 12:46:44 +03:00
.. deprecated :: 5.3.0
2020-07-09 12:24:23 +03:00
.. versionremoved :: 7.0.0
2019-10-03 15:12:28 +03:00
Setting the size of a TIFF image directly (eg. `` im.size = (256, 256) `` ) throws
an error. Use `` Image.resize `` instead.
2019-03-02 10:22:34 +03:00
VERSION constant
~~~~~~~~~~~~~~~~
2020-07-09 12:46:44 +03:00
.. deprecated :: 5.2.0
2020-07-09 12:24:23 +03:00
.. versionremoved :: 6.0.0
2019-03-02 10:22:34 +03:00
`` VERSION `` (the old PIL version, always 1.1.7) has been removed. Use
`` __version__ `` instead.
2018-12-06 11:56:07 +03:00
Undocumented ImageOps functions
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2020-07-09 12:46:44 +03:00
.. deprecated :: 4.3.0
2020-07-09 12:24:23 +03:00
.. versionremoved :: 6.0.0
2018-12-06 11:56:07 +03:00
2019-01-20 23:07:22 +03:00
Several undocumented functions in `` ImageOps `` have been removed. Use the equivalents
in `` ImageFilter `` instead:
2018-12-06 11:56:07 +03:00
========================== ============================
2019-01-20 23:07:22 +03:00
Removed Use instead
2018-12-06 11:56:07 +03:00
========================== ============================
`` ImageOps.box_blur `` `` ImageFilter.BoxBlur ``
`` ImageOps.gaussian_blur `` `` ImageFilter.GaussianBlur ``
`` ImageOps.gblur `` `` ImageFilter.GaussianBlur ``
`` ImageOps.usm `` `` ImageFilter.UnsharpMask ``
`` ImageOps.unsharp_mask `` `` ImageFilter.UnsharpMask ``
========================== ============================
PIL.OleFileIO
~~~~~~~~~~~~~
2020-07-09 12:46:44 +03:00
.. deprecated :: 4.0.0
2020-07-09 12:24:23 +03:00
.. versionremoved :: 6.0.0
2018-12-06 11:56:07 +03:00
2021-07-01 12:44:37 +03:00
PIL.OleFileIO was removed as a vendored file in Pillow 4.0.0 (2017-01) in favour of
2019-01-20 23:07:22 +03:00
the upstream olefile Python package, and replaced with an `` ImportError `` in 5.0.0
(2018-01). The deprecated file has now been removed from Pillow. If needed, install from
2020-03-09 14:39:27 +03:00
PyPI (eg. `` python3 -m pip install olefile `` ).