如何锚定文本并将其缩小以适合图像
How do I Anchor Text and Shrink it to fit it on an Image
我从 PIL API(这里是 link: https://pillow.readthedocs.io/en/stable/handbook/text-anchors.html)中找到这段代码,我还想根据文本的大小缩小它居中。
这里是锚定代码
from PIL import Image, ImageDraw, ImageFont
font = ImageFont.truetype("mont.ttf", 48)
im = Image.new("RGB", (200, 200), "white")
d = ImageDraw.Draw(im)
d.text((100, 100), "Quick", fill="black", anchor="ms", font=font)
im.save('text.png')
结果是这样的:
但是如果你增加字的大小,它看起来像这样:
所以我只希望文本居中并缩小以适合图像
没有具体要求,所以这里只针对固定大小(200, 200)的结果图,所以字体大小会改变。
- 通过
ImageDraw.textsize
查找文本大小
- 通过
ImageDraw.text
在与文本宽度相同的图像上绘制
- 通过
Image.resize
将图像大小调整为 (200-2*border, 200-2*border)
- 通过
Image.paste
将调整后的图片粘贴为 200x200 图片
from PIL import Image, ImageDraw, ImageFont
def text_to_image(text, filename='text.png', border=20):
im = Image.new("RGB", (1, 1), "white")
font = ImageFont.truetype("calibri.ttf", 48)
draw = ImageDraw.Draw(im)
size = draw.textsize(text, font=font)
width = max(size)
im = Image.new("RGB", (width, width), "white")
draw = ImageDraw.Draw(im)
draw.text((width//2, width//2), text, anchor='mm', fill="black", font=font)
im = im.resize((200-2*border, 200-2*border), resample=Image.LANCZOS)
new_im = Image.new("RGB", (200, 200), "white")
new_im.paste(im, (border, border))
new_im.show()
# new_im.save(filename)
text_to_image("Hello World")
我从 PIL API(这里是 link: https://pillow.readthedocs.io/en/stable/handbook/text-anchors.html)中找到这段代码,我还想根据文本的大小缩小它居中。
这里是锚定代码
from PIL import Image, ImageDraw, ImageFont
font = ImageFont.truetype("mont.ttf", 48)
im = Image.new("RGB", (200, 200), "white")
d = ImageDraw.Draw(im)
d.text((100, 100), "Quick", fill="black", anchor="ms", font=font)
im.save('text.png')
结果是这样的:
但是如果你增加字的大小,它看起来像这样:
所以我只希望文本居中并缩小以适合图像
没有具体要求,所以这里只针对固定大小(200, 200)的结果图,所以字体大小会改变。
- 通过
ImageDraw.textsize
查找文本大小
- 通过
ImageDraw.text
在与文本宽度相同的图像上绘制
- 通过
Image.resize
将图像大小调整为 (200-2*border, 200-2*border)
- 通过
Image.paste
将调整后的图片粘贴为 200x200 图片
from PIL import Image, ImageDraw, ImageFont
def text_to_image(text, filename='text.png', border=20):
im = Image.new("RGB", (1, 1), "white")
font = ImageFont.truetype("calibri.ttf", 48)
draw = ImageDraw.Draw(im)
size = draw.textsize(text, font=font)
width = max(size)
im = Image.new("RGB", (width, width), "white")
draw = ImageDraw.Draw(im)
draw.text((width//2, width//2), text, anchor='mm', fill="black", font=font)
im = im.resize((200-2*border, 200-2*border), resample=Image.LANCZOS)
new_im = Image.new("RGB", (200, 200), "white")
new_im.paste(im, (border, border))
new_im.show()
# new_im.save(filename)
text_to_image("Hello World")