绘制带有背景颜色的文本

тнα*_*ᴅ ϟ 8 python python-imaging-library python-3.x

我想知道如何绘制像这样的检查图像的文本

正如您所看到的,文本位于绿色图像上,文本具有粉红色背景

我的代码,这是我正在使用PIL 的代码的一部分

        draw = ImageDraw.Draw(background)
        font = ImageFont.truetype("assets/font2.ttf", 40)
        font2 = ImageFont.truetype("assets/font2.ttf", 70)
        arial = ImageFont.truetype("assets/font2.ttf", 30)
        name_font = ImageFont.truetype("assets/font.ttf", 30)
        para = textwrap.wrap(title, width=32)
        j = 0
        draw.text(
            (10, 10), f"{h}", fill="red", font=name_font
        )
        draw.text(
            (600, 150),
            "NOW PLAYING",
            fill="white",
            stroke_width=2,
            stroke_fill="white",
            font=font2,
        )
Run Code Online (Sandbox Code Playgroud)

提前致谢 :-)

Nul*_*ano 18

您可以使用该draw.textbbox方法获取文本字符串的边界框并使用该draw.rectangle方法填充它。

from PIL import Image, ImageDraw, ImageFont

image = Image.new("RGB", (500, 100), "white")
font = ImageFont.truetype("segoeui.ttf", 40)
draw = ImageDraw.Draw(image)
position = (10, 10)
text = "Hello world"

bbox = draw.textbbox(position, text, font=font)
draw.rectangle(bbox, fill="red")
draw.text(position, text, font=font, fill="black")

image.show()
Run Code Online (Sandbox Code Playgroud)

示例 1,红色矩形上的黑色文本

如果您想要背景矩形有更大的边距,您可以调整返回的边界框,如下所示:

left, top, right, bottom = draw.textbbox(position, text, font=font)
draw.rectangle((left-5, top-5, right+5, bottom+5), fill="red")
draw.text(position, text, font=font, fill="black")
Run Code Online (Sandbox Code Playgroud)

示例 2,背景中较宽的矩形