Skip to content

Commit

Permalink
Merge pull request #6484 from radarhere/imagedraw_font
Browse files Browse the repository at this point in the history
  • Loading branch information
hugovk committed Aug 15, 2022
2 parents 5a087cc + 520fa19 commit 87ecd01
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 2 deletions.
17 changes: 17 additions & 0 deletions Tests/test_imagedraw.py
Expand Up @@ -1314,6 +1314,23 @@ def test_stroke_multiline():
assert_image_similar_tofile(im, "Tests/images/imagedraw_stroke_multiline.png", 3.3)


def test_setting_default_font():
# Arrange
im = Image.new("RGB", (100, 250))
draw = ImageDraw.Draw(im)
font = ImageFont.truetype("Tests/fonts/FreeMono.ttf", 120)

# Act
ImageDraw.ImageDraw.font = font

# Assert
try:
assert draw.getfont() == font
finally:
ImageDraw.ImageDraw.font = None
assert isinstance(draw.getfont(), ImageFont.ImageFont)


def test_same_color_outline():
# Prepare shape
x0, y0 = 5, 5
Expand Down
7 changes: 6 additions & 1 deletion docs/reference/ImageDraw.rst
Expand Up @@ -64,7 +64,7 @@ Fonts

PIL can use bitmap fonts or OpenType/TrueType fonts.

Bitmap fonts are stored in PILs own format, where each font typically consists
Bitmap fonts are stored in PIL's own format, where each font typically consists
of two files, one named .pil and the other usually named .pbm. The former
contains font metrics, the latter raster data.

Expand Down Expand Up @@ -146,6 +146,11 @@ Methods
Get the current default font.

To set the default font for all future ImageDraw instances::

from PIL import ImageDraw, ImageFont
ImageDraw.ImageDraw.font = ImageFont.truetype("Tests/fonts/FreeMono.ttf")

:returns: An image font.

.. py:method:: ImageDraw.arc(xy, start, end, fill=None, width=0)
Expand Down
10 changes: 10 additions & 0 deletions docs/releasenotes/9.3.0.rst
Expand Up @@ -26,6 +26,16 @@ TODO
API Additions
=============

Allow default ImageDraw font to be set
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Rather than specifying a font when calling text-related ImageDraw methods, or
setting a font on each ImageDraw instance, the default font can now be set for
all future ImageDraw operations::

from PIL import ImageDraw, ImageFont
ImageDraw.ImageDraw.font = ImageFont.truetype("Tests/fonts/FreeMono.ttf")

Saving multiple MPO frames
^^^^^^^^^^^^^^^^^^^^^^^^^^

Expand Down
8 changes: 7 additions & 1 deletion src/PIL/ImageDraw.py
Expand Up @@ -46,6 +46,8 @@


class ImageDraw:
font = None

def __init__(self, im, mode=None):
"""
Create a drawing instance.
Expand Down Expand Up @@ -86,12 +88,16 @@ def __init__(self, im, mode=None):
else:
self.fontmode = "L" # aliasing is okay for other modes
self.fill = 0
self.font = None

def getfont(self):
"""
Get the current default font.
To set the default font for all future ImageDraw instances::
from PIL import ImageDraw, ImageFont
ImageDraw.ImageDraw.font = ImageFont.truetype("Tests/fonts/FreeMono.ttf")
:returns: An image font."""
if not self.font:
# FIXME: should add a font repository
Expand Down

0 comments on commit 87ecd01

Please sign in to comment.