9.2.0#
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=""
.