9.2.0

Deprecations

PyQt5 and PySide2

Deprecated since version 9.2.0.

Qt 5 reached end-of-life on 2020-12-08 for open-source users (and will reach EOL on 2023-12-08 for commercial licence holders).

Support for PyQt5 and PySide2 has been deprecated from ImageQt and will be removed in Pillow 10 (2023-07-01). Upgrade to PyQt6 or PySide6 instead.

FreeTypeFont.getmask2 fill parameter

Deprecated since version 9.2.0.

The undocumented fill parameter of FreeTypeFont.getmask2() has been deprecated and will be removed in Pillow 10 (2023-07-01).

PhotoImage.paste box parameter

Deprecated since version 9.2.0.

The box parameter is unused. It will be removed in Pillow 10.0.0 (2023-07-01).

Image.coerce_e

Deprecated since version 9.2.0.

This undocumented method has been deprecated and will be removed in Pillow 10 (2023-07-01).

Font size and offset methods

Deprecated since version 9.2.0.

Several functions for computing the size and offset of rendered text have been deprecated and will be removed in Pillow 10 (2023-07-01):

Deprecated

Use instead

FreeTypeFont.getsize() and FreeTypeFont.getoffset()

FreeTypeFont.getbbox() and FreeTypeFont.getlength()

FreeTypeFont.getsize_multiline()

ImageDraw.multiline_textbbox()

ImageFont.getsize()

ImageFont.getbbox() and ImageFont.getlength()

TransposedFont.getsize()

TransposedFont.getbbox() and TransposedFont.getlength()

ImageDraw.textsize() and ImageDraw.multiline_textsize()

ImageDraw.textbbox(), ImageDraw.textlength() and ImageDraw.multiline_textbbox()

ImageDraw2.Draw.textsize()

ImageDraw2.Draw.textbbox() and ImageDraw2.Draw.textlength()

Previous code:

from PIL import Image, ImageDraw, ImageFont

font = ImageFont.truetype("Tests/fonts/FreeMono.ttf")
width, height = font.getsize("Hello world")
left, top = font.getoffset("Hello world")

im = Image.new("RGB", (100, 100))
draw = ImageDraw.Draw(im)
width, height = draw.textsize("Hello world")

width, height = font.getsize_multiline("Hello\nworld")
width, height = draw.multiline_textsize("Hello\nworld")

Use instead:

from PIL import Image, ImageDraw, ImageFont

font = ImageFont.truetype("Tests/fonts/FreeMono.ttf")
left, top, right, bottom = font.getbbox("Hello world")
width, height = right - left, bottom - top

im = Image.new("RGB", (100, 100))
draw = ImageDraw.Draw(im)
width = draw.textlength("Hello world")

left, top, right, bottom = draw.multiline_textbbox((0, 0), "Hello\nworld")
width, height = right - left, bottom - top

API Additions

Image.apply_transparency

Added apply_transparency(), a method to take a P mode image with “transparency” in im.info, and apply the transparency to the palette instead. The image’s palette mode will become “RGBA”, and “transparency” will be removed from im.info.

Security

An additional decompression bomb check has been added for the GIF format.

Other Changes

Using gnome-screenshot on Linux

In grab() on Linux, if xdisplay is None then gnome-screenshot will be used to capture the display if it is installed. To capture the default X11 display instead, pass xdisplay="".