docs/releasenotes/7.0.0.rst
Python 2.7 ^^^^^^^^^^
Pillow has dropped support for Python 2.7, which reached end-of-life on 2020-01-01.
PILLOW_VERSION constant ^^^^^^^^^^^^^^^^^^^^^^^
PILLOW_VERSION has been removed. Use __version__ instead.
PIL.*ImagePlugin.version attributes ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
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__
ImtImagePlugin.__version__ PdfImagePlugin.__version__ XVThumbImagePlugin.__version__
IptcImagePlugin.__version__ PixarImagePlugin.__version__
=============================== ================================= ==================================
PyQt4 and PySide ^^^^^^^^^^^^^^^^
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.
Setting the size of TIFF images ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Setting the size of a TIFF image directly (eg. im.size = (256, 256)) throws
an error. Use Image.resize instead.
Default resampling filter ^^^^^^^^^^^^^^^^^^^^^^^^^
The default resampling filter has been changed to the high-quality convolution
Image.BICUBIC instead of Image.NEAREST, for the :py:meth:~PIL.Image.Image.resize
method and the :py:meth:~PIL.ImageOps.pad, :py:meth:~PIL.ImageOps.scale
and :py:meth:~PIL.ImageOps.fit functions.
Image.NEAREST is still always used for images in "P" and "1" modes.
See :ref:concept-filters to learn the difference. In short,
Image.NEAREST is a very fast filter, but simple and low-quality.
Image.draft() return value ^^^^^^^^^^^^^^^^^^^^^^^^^^
If the :py:meth:~PIL.Image.Image.draft method has no effect, it returns :data:None.
If it does have an effect, then it previously returned the image itself.
However, unlike other chain methods_, :py:meth:~PIL.Image.Image.draft does not
return a modified version of the image, but modifies it in-place. So instead, if
:py:meth:~PIL.Image.Image.draft has an effect, Pillow will now return a tuple
of the image mode and a co-ordinate box. The box is the original coordinates in the
bounds of resulting image. This may be useful in a subsequent
:py:meth:~PIL.Image.Image.resize call.
.. _chain methods: https://en.wikipedia.org/wiki/Method_chaining
Custom unidentified image error ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Pillow will now throw a custom UnidentifiedImageError when an image cannot be
identified. For backwards compatibility, this will inherit from :py:exc:OSError.
New argument reducing_gap for Image.resize() and Image.thumbnail() methods
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Speeds up resizing by resizing the image in two steps. The bigger reducing_gap,
the closer the result to the fair resampling. The smaller reducing_gap,
the faster resizing. With reducing_gap greater or equal to 3.0,
the result is indistinguishable from fair resampling.
The default value for :py:meth:~PIL.Image.Image.resize is :data:None,
which means that the optimization is turned off by default.
The default value for :py:meth:~PIL.Image.Image.thumbnail is 2.0,
which is very close to fair resampling while still being faster in many cases.
In addition, the same gap is applied when :py:meth:~PIL.Image.Image.thumbnail
calls :py:meth:~PIL.Image.Image.draft, which may greatly improve the quality
of JPEG thumbnails. As a result, :py:meth:~PIL.Image.Image.thumbnail
in the new version provides equally high speed and high quality from any
source (JPEG or arbitrary images).
New Image.reduce() method ^^^^^^^^^^^^^^^^^^^^^^^^^
:py:meth:~PIL.Image.Image.reduce is a highly efficient operation
to reduce an image by integer times. Normally, it shouldn't be used directly.
Used internally by :py:meth:~PIL.Image.Image.resize and :py:meth:~PIL.Image.Image.thumbnail
methods to speed up resize when a new argument reducing_gap is set.
Loading WMF images at a given DPI ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
On Windows, Pillow can read WMF files, with a default DPI of 72. An image can now also be loaded at another resolution::
from PIL import Image
with Image.open("drawing.wmf") as im:
im.load(dpi=144)
Image.del ^^^^^^^^^^^^^
Implicitly closing the image's underlying file in Image.__del__ has been removed.
Use a context manager or call :py:meth:~PIL.Image.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")
Better thumbnail geometry ^^^^^^^^^^^^^^^^^^^^^^^^^
When calculating the new dimensions in :py:meth:~PIL.Image.Image.thumbnail,
round to the nearest integer, instead of always rounding down.
This better preserves the original aspect ratio.
When the image width or height is not divisible by 8 the last row and column in the image get the correct weight after JPEG DCT scaling.