3.4.0

Backwards Incompatible Changes

Image.core.open_ppm removed

The nominally private/debugging function Image.core.open_ppm has been removed. If you were using this function, please use Image.open instead.

Deprecations

Deprecation Warning when Saving JPEGs

JPEG images cannot contain an alpha channel. Pillow prior to 3.4.0 silently drops the alpha channel. With this release Pillow will now issue a DeprecationWarning when attempting to save a RGBA mode image as a JPEG. This will become an error in Pillow 4.2.

API Additions

New resizing filters

Two new filters available for Image.resize() and Image.thumbnail() functions: BOX and HAMMING. BOX is the high-performance filter with two times shorter window than BILINEAR. It can be used for image reduction 3 and more times and produces a sharper result than BILINEAR.

HAMMING filter has the same performance as BILINEAR filter while providing the image downscaling quality comparable to BICUBIC. Both new filters don’t show good quality for the image upscaling.

New DDS Decoders

Pillow can now decode DXT3 images, as well as the previously supported DXT1 and DXT5 formats. All three formats are now decoded in C code for better performance.

Append images to GIF

Additional frames can now be appended when saving a GIF file, through the append_images argument. The new frames are passed in as a list of images, which may be have multiple frames themselves.

Note that the append_images argument is only used if save_all is also in effect, e.g.:

im.save(out, save_all=True, append_images=[im1, im2, ...])

Save multiple frame TIFF

Multiple frames can now be saved in a TIFF file by using the save_all option. e.g.:

im.save("filename.tiff", format="TIFF", save_all=True)