Hide navigation sidebar
Hide table of contents sidebar
Skip to content
Back to top
View this page
Toggle table of contents sidebar

# 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)