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 :py:exc:`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)
