mirror of
https://github.com/python-pillow/Pillow.git
synced 2024-12-25 17:36:18 +03:00
update test_imagefont to use textbbox
This commit is contained in:
parent
1bf87556ef
commit
e2158344a0
Binary file not shown.
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
@ -94,7 +94,7 @@ class TestImageFont:
|
||||||
def _render(self, font):
|
def _render(self, font):
|
||||||
txt = "Hello World!"
|
txt = "Hello World!"
|
||||||
ttf = ImageFont.truetype(font, FONT_SIZE, layout_engine=self.LAYOUT_ENGINE)
|
ttf = ImageFont.truetype(font, FONT_SIZE, layout_engine=self.LAYOUT_ENGINE)
|
||||||
ttf.getsize(txt)
|
ttf.getbbox(txt)
|
||||||
|
|
||||||
img = Image.new("RGB", (256, 64), "white")
|
img = Image.new("RGB", (256, 64), "white")
|
||||||
d = ImageDraw.Draw(img)
|
d = ImageDraw.Draw(img)
|
||||||
|
@ -135,15 +135,15 @@ class TestImageFont:
|
||||||
target = "Tests/images/transparent_background_text_L.png"
|
target = "Tests/images/transparent_background_text_L.png"
|
||||||
assert_image_similar_tofile(im.convert("L"), target, 0.01)
|
assert_image_similar_tofile(im.convert("L"), target, 0.01)
|
||||||
|
|
||||||
def test_textsize_equal(self):
|
def test_textbbox_equal(self):
|
||||||
im = Image.new(mode="RGB", size=(300, 100))
|
im = Image.new(mode="RGB", size=(300, 100))
|
||||||
draw = ImageDraw.Draw(im)
|
draw = ImageDraw.Draw(im)
|
||||||
ttf = self.get_font()
|
ttf = self.get_font()
|
||||||
|
|
||||||
txt = "Hello World!"
|
txt = "Hello World!"
|
||||||
size = draw.textsize(txt, ttf)
|
bbox = draw.textbbox((10, 10), txt, ttf)
|
||||||
draw.text((10, 10), txt, font=ttf)
|
draw.text((10, 10), txt, font=ttf)
|
||||||
draw.rectangle((10, 10, 10 + size[0], 10 + size[1]))
|
draw.rectangle(bbox)
|
||||||
|
|
||||||
assert_image_similar_tofile(
|
assert_image_similar_tofile(
|
||||||
im, "Tests/images/rectangle_surrounding_text.png", 2.5
|
im, "Tests/images/rectangle_surrounding_text.png", 2.5
|
||||||
|
@ -184,7 +184,7 @@ class TestImageFont:
|
||||||
im = Image.new(mode="RGB", size=(300, 100))
|
im = Image.new(mode="RGB", size=(300, 100))
|
||||||
draw = ImageDraw.Draw(im)
|
draw = ImageDraw.Draw(im)
|
||||||
ttf = self.get_font()
|
ttf = self.get_font()
|
||||||
line_spacing = draw.textsize("A", font=ttf)[1] + 4
|
line_spacing = ttf.getbbox("A")[3] + 4
|
||||||
lines = TEST_TEXT.split("\n")
|
lines = TEST_TEXT.split("\n")
|
||||||
y = 0
|
y = 0
|
||||||
for line in lines:
|
for line in lines:
|
||||||
|
@ -245,19 +245,39 @@ class TestImageFont:
|
||||||
im = Image.new(mode="RGB", size=(300, 100))
|
im = Image.new(mode="RGB", size=(300, 100))
|
||||||
draw = ImageDraw.Draw(im)
|
draw = ImageDraw.Draw(im)
|
||||||
|
|
||||||
# Test that textsize() correctly connects to multiline_textsize()
|
with pytest.warns(DeprecationWarning) as log:
|
||||||
assert draw.textsize(TEST_TEXT, font=ttf) == draw.multiline_textsize(
|
# Test that textsize() correctly connects to multiline_textsize()
|
||||||
TEST_TEXT, font=ttf
|
assert draw.textsize(TEST_TEXT, font=ttf) == draw.multiline_textsize(
|
||||||
|
TEST_TEXT, font=ttf
|
||||||
|
)
|
||||||
|
|
||||||
|
# Test that multiline_textsize corresponds to ImageFont.textsize()
|
||||||
|
# for single line text
|
||||||
|
assert ttf.getsize("A") == draw.multiline_textsize("A", font=ttf)
|
||||||
|
|
||||||
|
# Test that textsize() can pass on additional arguments
|
||||||
|
# to multiline_textsize()
|
||||||
|
draw.textsize(TEST_TEXT, font=ttf, spacing=4)
|
||||||
|
draw.textsize(TEST_TEXT, ttf, 4)
|
||||||
|
assert len(log) == 6
|
||||||
|
|
||||||
|
def test_multiline_bbox(self):
|
||||||
|
ttf = self.get_font()
|
||||||
|
im = Image.new(mode="RGB", size=(300, 100))
|
||||||
|
draw = ImageDraw.Draw(im)
|
||||||
|
|
||||||
|
# Test that textbbox() correctly connects to multiline_textbbox()
|
||||||
|
assert draw.textbbox((0, 0), TEST_TEXT, font=ttf) == draw.multiline_textbbox(
|
||||||
|
(0, 0), TEST_TEXT, font=ttf
|
||||||
)
|
)
|
||||||
|
|
||||||
# Test that multiline_textsize corresponds to ImageFont.textsize()
|
# Test that multiline_textbbox corresponds to ImageFont.textbbox()
|
||||||
# for single line text
|
# for single line text
|
||||||
assert ttf.getsize("A") == draw.multiline_textsize("A", font=ttf)
|
assert ttf.getbbox("A") == draw.multiline_textbbox((0, 0), "A", font=ttf)
|
||||||
|
|
||||||
# Test that textsize() can pass on additional arguments
|
# Test that textbbox() can pass on additional arguments
|
||||||
# to multiline_textsize()
|
# to multiline_textbbox()
|
||||||
draw.textsize(TEST_TEXT, font=ttf, spacing=4)
|
draw.textbbox((0, 0), TEST_TEXT, font=ttf, spacing=4)
|
||||||
draw.textsize(TEST_TEXT, ttf, 4)
|
|
||||||
|
|
||||||
def test_multiline_width(self):
|
def test_multiline_width(self):
|
||||||
ttf = self.get_font()
|
ttf = self.get_font()
|
||||||
|
@ -265,9 +285,15 @@ class TestImageFont:
|
||||||
draw = ImageDraw.Draw(im)
|
draw = ImageDraw.Draw(im)
|
||||||
|
|
||||||
assert (
|
assert (
|
||||||
draw.textsize("longest line", font=ttf)[0]
|
draw.textbbox((0, 0), "longest line", font=ttf)[2]
|
||||||
== draw.multiline_textsize("longest line\nline", font=ttf)[0]
|
== draw.multiline_textbbox((0, 0), "longest line\nline", font=ttf)[2]
|
||||||
)
|
)
|
||||||
|
with pytest.warns(DeprecationWarning) as log:
|
||||||
|
assert (
|
||||||
|
draw.textsize("longest line", font=ttf)[0]
|
||||||
|
== draw.multiline_textsize("longest line\nline", font=ttf)[0]
|
||||||
|
)
|
||||||
|
assert len(log) == 2
|
||||||
|
|
||||||
def test_multiline_spacing(self):
|
def test_multiline_spacing(self):
|
||||||
ttf = self.get_font()
|
ttf = self.get_font()
|
||||||
|
@ -373,9 +399,11 @@ class TestImageFont:
|
||||||
text = "offset this"
|
text = "offset this"
|
||||||
|
|
||||||
# Act
|
# Act
|
||||||
offset = font.getoffset(text)
|
with pytest.warns(DeprecationWarning) as log:
|
||||||
|
offset = font.getoffset(text)
|
||||||
|
|
||||||
# Assert
|
# Assert
|
||||||
|
assert len(log) == 1
|
||||||
assert offset == (0, 3)
|
assert offset == (0, 3)
|
||||||
|
|
||||||
def test_free_type_font_get_mask(self):
|
def test_free_type_font_get_mask(self):
|
||||||
|
@ -417,11 +445,11 @@ class TestImageFont:
|
||||||
# Assert
|
# Assert
|
||||||
assert_image_equal_tofile(im, "Tests/images/default_font.png")
|
assert_image_equal_tofile(im, "Tests/images/default_font.png")
|
||||||
|
|
||||||
def test_getsize_empty(self):
|
def test_getbbox_empty(self):
|
||||||
# issue #2614
|
# issue #2614
|
||||||
font = self.get_font()
|
font = self.get_font()
|
||||||
# should not crash.
|
# should not crash.
|
||||||
assert (0, 0) == font.getsize("")
|
assert (0, 0, 0, 0) == font.getbbox("")
|
||||||
|
|
||||||
def test_render_empty(self):
|
def test_render_empty(self):
|
||||||
# issue 2666
|
# issue 2666
|
||||||
|
@ -438,7 +466,7 @@ class TestImageFont:
|
||||||
# issue #2826
|
# issue #2826
|
||||||
font = ImageFont.load_default()
|
font = ImageFont.load_default()
|
||||||
with pytest.raises(UnicodeEncodeError):
|
with pytest.raises(UnicodeEncodeError):
|
||||||
font.getsize("’")
|
font.getbbox("’")
|
||||||
|
|
||||||
def test_unicode_extended(self):
|
def test_unicode_extended(self):
|
||||||
# issue #3777
|
# issue #3777
|
||||||
|
@ -563,17 +591,29 @@ class TestImageFont:
|
||||||
assert t.font.x_ppem == 20
|
assert t.font.x_ppem == 20
|
||||||
assert t.font.y_ppem == 20
|
assert t.font.y_ppem == 20
|
||||||
assert t.font.glyphs == 4177
|
assert t.font.glyphs == 4177
|
||||||
assert t.getsize("A") == (12, 16)
|
assert t.getbbox("A") == (0, 4, 12, 16)
|
||||||
assert t.getsize("AB") == (24, 16)
|
assert t.getbbox("AB") == (0, 4, 24, 16)
|
||||||
assert t.getsize("M") == (12, 16)
|
assert t.getbbox("M") == (0, 4, 12, 16)
|
||||||
assert t.getsize("y") == (12, 20)
|
assert t.getbbox("y") == (0, 7, 12, 20)
|
||||||
assert t.getsize("a") == (12, 16)
|
assert t.getbbox("a") == (0, 7, 12, 16)
|
||||||
assert t.getsize_multiline("A") == (12, 16)
|
assert t.getlength("A") == 12
|
||||||
assert t.getsize_multiline("AB") == (24, 16)
|
assert t.getlength("AB") == 24
|
||||||
assert t.getsize_multiline("a") == (12, 16)
|
assert t.getlength("M") == 12
|
||||||
assert t.getsize_multiline("ABC\n") == (36, 36)
|
assert t.getlength("y") == 12
|
||||||
assert t.getsize_multiline("ABC\nA") == (36, 36)
|
assert t.getlength("a") == 12
|
||||||
assert t.getsize_multiline("ABC\nAaaa") == (48, 36)
|
with pytest.warns(DeprecationWarning) as log:
|
||||||
|
assert t.getsize("A") == (12, 16)
|
||||||
|
assert t.getsize("AB") == (24, 16)
|
||||||
|
assert t.getsize("M") == (12, 16)
|
||||||
|
assert t.getsize("y") == (12, 20)
|
||||||
|
assert t.getsize("a") == (12, 16)
|
||||||
|
assert t.getsize_multiline("A") == (12, 16)
|
||||||
|
assert t.getsize_multiline("AB") == (24, 16)
|
||||||
|
assert t.getsize_multiline("a") == (12, 16)
|
||||||
|
assert t.getsize_multiline("ABC\n") == (36, 36)
|
||||||
|
assert t.getsize_multiline("ABC\nA") == (36, 36)
|
||||||
|
assert t.getsize_multiline("ABC\nAaaa") == (48, 36)
|
||||||
|
assert len(log) == 11
|
||||||
|
|
||||||
def test_getsize_stroke(self):
|
def test_getsize_stroke(self):
|
||||||
# Arrange
|
# Arrange
|
||||||
|
@ -581,14 +621,22 @@ class TestImageFont:
|
||||||
|
|
||||||
# Act / Assert
|
# Act / Assert
|
||||||
for stroke_width in [0, 2]:
|
for stroke_width in [0, 2]:
|
||||||
assert t.getsize("A", stroke_width=stroke_width) == (
|
assert t.getbbox("A", stroke_width=stroke_width) == (
|
||||||
12 + stroke_width * 2,
|
0 - stroke_width,
|
||||||
16 + stroke_width * 2,
|
4 - stroke_width,
|
||||||
)
|
12 + stroke_width,
|
||||||
assert t.getsize_multiline("ABC\nAaaa", stroke_width=stroke_width) == (
|
16 + stroke_width,
|
||||||
48 + stroke_width * 2,
|
|
||||||
36 + stroke_width * 4,
|
|
||||||
)
|
)
|
||||||
|
with pytest.warns(DeprecationWarning) as log:
|
||||||
|
assert t.getsize("A", stroke_width=stroke_width) == (
|
||||||
|
12 + stroke_width * 2,
|
||||||
|
16 + stroke_width * 2,
|
||||||
|
)
|
||||||
|
assert t.getsize_multiline("ABC\nAaaa", stroke_width=stroke_width) == (
|
||||||
|
48 + stroke_width * 2,
|
||||||
|
36 + stroke_width * 4,
|
||||||
|
)
|
||||||
|
assert len(log) == 2
|
||||||
|
|
||||||
def test_complex_font_settings(self):
|
def test_complex_font_settings(self):
|
||||||
# Arrange
|
# Arrange
|
||||||
|
@ -871,7 +919,7 @@ class TestImageFont:
|
||||||
def test_standard_embedded_color(self):
|
def test_standard_embedded_color(self):
|
||||||
txt = "Hello World!"
|
txt = "Hello World!"
|
||||||
ttf = ImageFont.truetype(FONT_PATH, 40, layout_engine=self.LAYOUT_ENGINE)
|
ttf = ImageFont.truetype(FONT_PATH, 40, layout_engine=self.LAYOUT_ENGINE)
|
||||||
ttf.getsize(txt)
|
ttf.getbbox(txt)
|
||||||
|
|
||||||
im = Image.new("RGB", (300, 64), "white")
|
im = Image.new("RGB", (300, 64), "white")
|
||||||
d = ImageDraw.Draw(im)
|
d = ImageDraw.Draw(im)
|
||||||
|
|
|
@ -140,8 +140,8 @@ def test_ligature_features():
|
||||||
target = "Tests/images/test_ligature_features.png"
|
target = "Tests/images/test_ligature_features.png"
|
||||||
assert_image_similar_tofile(im, target, 0.5)
|
assert_image_similar_tofile(im, target, 0.5)
|
||||||
|
|
||||||
liga_size = ttf.getsize("fi", features=["-liga"])
|
liga_bbox = ttf.getbbox("fi", features=["-liga"])
|
||||||
assert liga_size == (13, 19)
|
assert liga_bbox == (0, 4, 13, 19)
|
||||||
|
|
||||||
|
|
||||||
def test_kerning_features():
|
def test_kerning_features():
|
||||||
|
|
Loading…
Reference in New Issue
Block a user