Skip to content

Commit 4ba5924

Browse files
committed
Added ImageText
1 parent d560320 commit 4ba5924

File tree

6 files changed

+490
-292
lines changed

6 files changed

+490
-292
lines changed

Tests/test_imagetext.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
from __future__ import annotations
2+
3+
import pytest
4+
5+
from PIL import ImageFont, ImageText
6+
7+
from .helper import skip_unless_feature
8+
9+
FONT_PATH = "Tests/fonts/FreeMono.ttf"
10+
11+
12+
@pytest.fixture(
13+
scope="module",
14+
params=[
15+
pytest.param(ImageFont.Layout.BASIC),
16+
pytest.param(ImageFont.Layout.RAQM, marks=skip_unless_feature("raqm")),
17+
],
18+
)
19+
def layout_engine(request: pytest.FixtureRequest) -> ImageFont.Layout:
20+
return request.param
21+
22+
23+
@pytest.fixture(scope="module")
24+
def font(layout_engine: ImageFont.Layout) -> ImageFont.FreeTypeFont:
25+
return ImageFont.truetype(FONT_PATH, 20, layout_engine=layout_engine)
26+
27+
28+
def test_get_length(font: ImageFont.FreeTypeFont) -> None:
29+
assert ImageText.ImageText("A", font).get_length() == 12
30+
assert ImageText.ImageText("AB", font).get_length() == 24
31+
assert ImageText.ImageText("M", font).get_length() == 12
32+
assert ImageText.ImageText("y", font).get_length() == 12
33+
assert ImageText.ImageText("a", font).get_length() == 12
34+
35+
36+
def test_get_bbox(font: ImageFont.FreeTypeFont) -> None:
37+
assert ImageText.ImageText("A", font).get_bbox() == (0, 4, 12, 16)
38+
assert ImageText.ImageText("AB", font).get_bbox() == (0, 4, 24, 16)
39+
assert ImageText.ImageText("M", font).get_bbox() == (0, 4, 12, 16)
40+
assert ImageText.ImageText("y", font).get_bbox() == (0, 7, 12, 20)
41+
assert ImageText.ImageText("a", font).get_bbox() == (0, 7, 12, 16)

docs/reference/ImageText.rst

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
.. py:module:: PIL.ImageText
2+
.. py:currentmodule:: PIL.ImageText
3+
4+
:py:mod:`~PIL.ImageText` module
5+
===============================
6+
7+
The :py:mod:`~PIL.ImageText` module defines a class with the same name. Instances of
8+
this class provide a way to use fonts with text strings or bytes. The result is a
9+
simple API to apply styling to pieces of text and measure them.
10+
11+
Example
12+
-------
13+
14+
::
15+
16+
from PIL import Image, ImageDraw, ImageFont, ImageText
17+
font = ImageFont.truetype("Tests/fonts/FreeMono.ttf", 24)
18+
19+
text = ImageText.ImageText("Hello world", font)
20+
text.embed_color()
21+
text.stroke(2, "#0f0")
22+
23+
print(text.get_length()) # 154.0
24+
print(text.get_bbox()) # (-2, 3, 156, 22)
25+
26+
Methods
27+
-------
28+
29+
.. autoclass:: PIL.ImageText.ImageText
30+
:members:

docs/reference/index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ Reference
2424
ImageSequence
2525
ImageShow
2626
ImageStat
27+
ImageText
2728
ImageTk
2829
ImageTransform
2930
ImageWin

0 commit comments

Comments
 (0)