diff --git a/Tests/images/standard_embedded_multiline_centered.png b/Tests/images/standard_embedded_multiline_centered.png deleted file mode 100644 index 3aebe37790d..00000000000 Binary files a/Tests/images/standard_embedded_multiline_centered.png and /dev/null differ diff --git a/Tests/images/text_float_coord.png b/Tests/images/text_float_coord.png new file mode 100644 index 00000000000..49468698cd4 Binary files /dev/null and b/Tests/images/text_float_coord.png differ diff --git a/Tests/images/text_float_coord_1_alt.png b/Tests/images/text_float_coord_1_alt.png new file mode 100644 index 00000000000..50bdac3d8f3 Binary files /dev/null and b/Tests/images/text_float_coord_1_alt.png differ diff --git a/Tests/test_imagefont.py b/Tests/test_imagefont.py index f3cf3d880b5..e5e425cbcc7 100644 --- a/Tests/test_imagefont.py +++ b/Tests/test_imagefont.py @@ -958,22 +958,29 @@ def test_standard_embedded_color(self): d = ImageDraw.Draw(im) d.text((10, 10), txt, font=ttf, fill="#fa6", embedded_color=True) - assert_image_similar_tofile(im, "Tests/images/standard_embedded.png", 6.2) + assert_image_similar_tofile(im, "Tests/images/standard_embedded.png", 3.1) - def test_multiline_centered_embedded_color(self): - txt = "Hello\nWorld!" + @pytest.mark.parametrize("fontmode", ("1", "L", "RGBA")) + def test_float_coord(self, fontmode): + txt = "Hello World!" ttf = ImageFont.truetype(FONT_PATH, 40, layout_engine=self.LAYOUT_ENGINE) - ttf.getbbox(txt) - im = Image.new("RGB", (160, 96), "white") + im = Image.new("RGB", (300, 64), "white") d = ImageDraw.Draw(im) - d.multiline_text( - (10, 10), txt, font=ttf, fill="#fa6", align="center", embedded_color=True - ) + if fontmode == "1": + d.fontmode = "1" - assert_image_similar_tofile( - im, "Tests/images/standard_embedded_multiline_centered.png", 6.2 - ) + embedded_color = fontmode == "RGBA" + d.text((9.5, 9.5), txt, font=ttf, fill="#fa6", embedded_color=embedded_color) + try: + assert_image_similar_tofile(im, "Tests/images/text_float_coord.png", 3.9) + except AssertionError: + if fontmode == "1" and self.LAYOUT_ENGINE == ImageFont.Layout.BASIC: + assert_image_similar_tofile( + im, "Tests/images/text_float_coord_1_alt.png", 1 + ) + else: + raise def test_cbdt(self): try: diff --git a/src/PIL/ImageDraw.py b/src/PIL/ImageDraw.py index 9b852fbcdda..3a6063a6c7c 100644 --- a/src/PIL/ImageDraw.py +++ b/src/PIL/ImageDraw.py @@ -482,9 +482,8 @@ def draw_text(ink, stroke_width=0, stroke_offset=None): # extract mask and set text alpha color, mask = mask, mask.getband(3) color.fillband(3, (ink >> 24) & 0xFF) - coord = tuple(int(c) for c in coord) - coord2 = coord[0] + mask.size[0], coord[1] + mask.size[1] - self.im.paste(color, coord + coord2, mask) + x, y = (int(c) for c in coord) + self.im.paste(color, (x, y, x + mask.size[0], y + mask.size[1]), mask) else: self.draw.draw_bitmap(coord, mask, ink)