9.2.0 (2022-07-01)¶
Security¶
An additional decompression bomb check has been added for the GIF format.
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 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
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", font)
width, height = font.getsize_multiline("Hello\nworld")
width, height = draw.multiline_textsize("Hello\nworld", font)
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", font)
left, top, right, bottom = draw.multiline_textbbox((0, 0), "Hello\nworld", font)
width, height = right - left, bottom - top
Previously, the size
methods returned a height
that included the vertical
offset of the text, while the new bbox
methods distinguish this as a top
offset.

If you are using these methods for aligning text, consider using Text anchors instead which avoid issues that can occur with non-English text or unusual fonts. For example, instead of the following code:
from PIL import Image, ImageDraw, ImageFont
font = ImageFont.truetype("Tests/fonts/FreeMono.ttf")
im = Image.new("RGB", (100, 100))
draw = ImageDraw.Draw(im)
width, height = draw.textsize("Hello world", font)
x, y = (100 - width) / 2, (100 - height) / 2
draw.text((x, y), "Hello world", font=font)
Use instead:
from PIL import Image, ImageDraw, ImageFont
font = ImageFont.truetype("Tests/fonts/FreeMono.ttf")
im = Image.new("RGB", (100, 100))
draw = ImageDraw.Draw(im)
draw.text((100 / 2, 100 / 2), "Hello world", font=font, anchor="mm")
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
.
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=""
.