Allow saving of zero quality JPEG images¶
If no quality was specified when saving a JPEG, Pillow internally used a value of zero to indicate that the default quality should be used. However, this removed the ability to actually save a JPEG with zero quality. This has now been resolved.
from PIL import Image im = Image.open("hopper.jpg") im.save("out.jpg", quality=0)
New channel operations¶
PILLOW_VERSION has been re-added but is deprecated and will be removed in a future
It was initially removed in Pillow 7.0.0, but brought back in 7.1.0 to give projects more time to upgrade.
Support for different charset encodings in PcfFontFile¶
PcfFontFile output only bitmap PIL fonts with ISO 8859-1 encoding, even
though the PCF format supports Unicode, making it hard to work with Pillow with bitmap
fonts in languages which use different character sets.
Now it’s possible to set a different charset encoding in
constructor. By default, it generates a PIL font file with ISO 8859-1 as before. The
generated PIL font file still contains up to 256 characters, but the character set is
different depending on the selected encoding.
To use such a font with
ImageDraw.text, call it with a bytes object with the same
encoding as the font file.
Support has been added for
ImageGrab.grab() on Linux using the X server
with the XCB library.
xdisplay parameter has been added to select the X server,
with the default value of
None using the default X server.
Passing a different value on Windows or macOS will force taking a snapshot using the selected X server; pass an empty string to use the default X server. XCB support is not included in pre-compiled wheels for Windows and macOS.
This release includes security fixes.
CVE-2020-10177 Fix multiple OOB reads in FLI decoding
CVE-2020-10378 Fix bounds overflow in PCX decoding
CVE-2020-10379 Fix two buffer overflows in TIFF decoding
CVE-2020-10994 Fix bounds overflow in JPEG 2000 decoding
CVE-2020-11538 Fix buffer overflow in SGI-RLE decoding
If present, only use alpha channel for bounding box¶
getbbox() method calculates the bounding
box, for an RGB image it trims black pixels. Similarly, for an RGBA image it
would trim black transparent pixels. This is now changed so that if an image
has an alpha channel (RGBA, RGBa, PA, LA, La), any transparent pixels are
Improved APNG support¶
Added support for reading and writing Animated Portable Network Graphics (APNG) images.
The PNG plugin now supports using the
seek() method and the
Iterator class to read APNG frame sequences.
The PNG plugin also now supports using the
append_images argument to write APNG frame
sequences. See APNG sequences for further details.