Pillow/docs/releasenotes/2.7.rst
homm b183f50ebc chapters:
Image resizing filters
Bicubic and Bilinear downscaling
Lanczos upscaling quality
Bicubic upscaling quality
2014-11-30 03:09:39 +03:00

100 lines
3.7 KiB
ReStructuredText

Pillow 2.7
==========
Image resizing filters
----------------------
Image resizing methods :py:meth:`~PIL.Image.Image.resize` and
:py:meth:`~PIL.Image.Image.thumbnail` takes `resample` argument, which tells
what filter should be used for resampling. Possible values are:
:py:attr:`PIL.Image.NEAREST`, :py:attr:`PIL.Image.BILINEAR`,
:py:attr:`PIL.Image.BICUBIC` and :py:attr:`PIL.Image.ANTIALIAS`.
Almost all of them was changed in this version.
Bicubic and Bilinear downscaling
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
From very begining :py:attr:`~PIL.Image.BILINEAR` and
:py:attr:`~PIL.Image.BICUBIC` filters was based on afine transformations
and uses fixed number of pixels from source image for every destination pixel
(that was 2x2 pixels for :py:attr:`~PIL.Image.BILINEAR` and 4x4 for
:py:attr:`~PIL.Image.BICUBIC`). This gave an unsatisfied result for downscaling.
At the same time high quality convolutions-based algorithm with flexeible kernel
was used for :py:attr:`~PIL.Image.ANTIALIAS` filter).
Starting from 2.7 high quality convolutions-based algorithm is used for all of
these three filters.
If you have previously used any tricks to maintain quality when downscaling with
:py:attr:`~PIL.Image.BILINEAR` and :py:attr:`~PIL.Image.BICUBIC` filters
(for example, reducing within several steps), they a unnecessary now.
Antialias renamed to Lanczos
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
New :py:attr:`PIL.Image.LANCZOS` constant was added instead of
:py:attr:`~PIL.Image.ANTIALIAS`.
When :py:attr:`~PIL.Image.ANTIALIAS` was initially added, it was the only
high-qality filter based on convolutions. It's name was supposed to reflect
this. Starting from 2.7 all resize method are based on convolutions. All of them
are antialias from now. And the real name of :py:attr:`~PIL.Image.ANTIALIAS`
filter is Lanczos filter.
:py:attr:`~PIL.Image.ANTIALIAS` constant is leaved for backward compatibility
and is an alias for :py:attr:`~PIL.Image.LANCZOS`.
Lanczos upscaling quality
^^^^^^^^^^^^^^^^^^^^^^^^^
Image upscaling quality with :py:attr:`PIL.Image.LANCZOS` filter was almost
the same as :py:attr:`PIL.Image.BILINEAR` due to bug. This was fixed.
Bicubic upscaling quality
^^^^^^^^^^^^^^^^^^^^^^^^^
:py:attr:`~PIL.Image.BICUBIC` filter for affine trnsformations was producing
sharp, slightly pixelated image for upscaling. Bicubic for convolutions is
more soft.
Resize performance
^^^^^^^^^^^^^^^^^^
Default filter for thumbnails
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
In Pillow 2.5 default filter for :py:meth:`~PIL.Image.Image.thumbnail` was
changed from :py:attr:`~PIL.Image.NEAREST` to :py:attr:`~PIL.Image.ANTIALIAS`.
Antialias was chosen because all other filters gave poor quality for reduction.
Starting from Pillow 2.7 :py:attr:`~PIL.Image.ANTIALIAS` replaced with
:py:attr:`~PIL.Image.BICUBIC`, because bicubic is faster and
:py:attr:`~PIL.Image.ANTIALIAS` doesn't give any advantages after
downscaling with libJPEG, which uses supersampling internaly, not convolutions.
Image transposing
-----------------
New method :py:attr:`PIL.Image.TRANSPOSE` was added for
:py:meth:`~PIL.Image.Image.transpose` operation in addition to
:py:attr:`~PIL.Image.FLIP_LEFT_RIGHT`, :py:attr:`~PIL.Image.FLIP_TOP_BOTTOM`,
:py:attr:`~PIL.Image.ROTATE_90`, :py:attr:`~PIL.Image.ROTATE_180`,
:py:attr:`~PIL.Image.ROTATE_270`. :py:attr:`~PIL.Image.TRANSPOSE` is algebra
transpose, when image reflected over its main diagonal.
Speed of :py:attr:`~PIL.Image.ROTATE_90`, :py:attr:`~PIL.Image.ROTATE_270`
and :py:attr:`~PIL.Image.TRANSPOSE` was significantly improved for large images,
which doesn't fit in processor cache.
Gaussian blur and unsharp mask
------------------------------
Blur radius
^^^^^^^^^^^
Blur Performance
^^^^^^^^^^^^^^^^
Blur quality
^^^^^^^^^^^^