docs/releasenotes/9.4.0.rst
Fix memory DOS in ImageFont ^^^^^^^^^^^^^^^^^^^^^^^^^^^
A corrupt or specially crafted TTF font could have font metrics that lead to
unreasonably large sizes when rendering text in font. ImageFont.py did not
check the image size before allocating memory for it. This dates to the PIL
fork. Pillow 8.2.0 added a check for large sizes, but did not consider the
case where one dimension is zero.
Null pointer dereference crash in ImageFont ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Pillow attempted to dereference a null pointer in ImageFont, leading to a
crash. An error is now raised instead. This has been present since
Pillow 8.0.0.
Added start position for getmask and getmask2 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Text may render differently when starting at fractional coordinates, so
:py:meth:.FreeTypeFont.getmask and :py:meth:.FreeTypeFont.getmask2 now
support a start argument. This tuple of horizontal and vertical offset
will be used internally by :py:meth:.ImageDraw.text to more accurately place
text at the xy coordinates.
Added the exact encoding option for WebP
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The exact encoding option for WebP is now supported. The WebP encoder
removes the hidden RGB values for better compression by default in libwebp 0.5
or later. By setting this option to True, the encoder will keep the hidden
RGB values.
Added signed option when saving JPEG2000
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
If the signed keyword argument is present and true when saving JPEG2000
images, then tell the encoder to save the image as signed.
Added IFD, Interop and LightSource ExifTags enums ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
:py:data:~PIL.ExifTags.IFD has been added, allowing enums to be used with
:py:meth:~PIL.Image.Exif.get_ifd::
from PIL import Image, ExifTags
im = Image.open("Tests/images/flower.jpg")
print(im.getexif().get_ifd(ExifTags.IFD.Exif))
IFD1 can also be used with :py:meth:~PIL.Image.Exif.get_ifd, but it should
not be used in other contexts, as the enum value is only internally meaningful.
:py:data:~PIL.ExifTags.Interop has been added for tags within the Interop IFD::
from PIL import Image, ExifTags
im = Image.open("Tests/images/flower.jpg")
interop_ifd = im.getexif().get_ifd(ExifTags.IFD.Interop)
print(interop_ifd.get(ExifTags.Interop.InteropIndex)) # R98
:py:data:~PIL.ExifTags.LightSource has been added for values within the LightSource
tag::
from PIL import Image, ExifTags
im = Image.open("Tests/images/iptc.jpg")
exif_ifd = im.getexif().get_ifd(ExifTags.IFD.Exif)
print(ExifTags.LightSource(exif_ifd[0x9208])) # LightSource.Unknown
getxmp() ^^^^^^^^
XMP data <https://en.wikipedia.org/wiki/Extensible_Metadata_Platform>_ can now be
decoded for WEBP images through getxmp().
Writing JPEG comments ^^^^^^^^^^^^^^^^^^^^^
When saving a JPEG image, a comment can now be written from
:py:attr:~PIL.Image.Image.info, or by using an argument when saving::
im.save(out, comment="Test comment")
Added support for DDS L and LA images ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Support has been added to read and write L and LA DDS images in the uncompressed format, known as "luminance" textures.
.. _restored-image-constants:
Constants ^^^^^^^^^
In Pillow 9.1.0, the following constants were deprecated. That has been reversed and these constants will now remain available.
Image.NONEImage.NEARESTImage.ORDEREDImage.RASTERIZEImage.FLOYDSTEINBERGImage.WEBImage.ADAPTIVEImage.AFFINEImage.EXTENTImage.PERSPECTIVEImage.QUADImage.MESHImage.FLIP_LEFT_RIGHTImage.FLIP_TOP_BOTTOMImage.ROTATE_90Image.ROTATE_180Image.ROTATE_270Image.TRANSPOSEImage.TRANSVERSEImage.BOXImage.BILINEARImage.HAMMINGImage.BICUBICImage.LANCZOSImage.MEDIANCUTImage.MAXCOVERAGEImage.FASTOCTREEImage.LIBIMAGEQUANT