首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何设置锚点,使文本在图像中心与PIL.ImageDraw.Draw.text相匹配?

如何设置锚点,使文本在图像中心与PIL.ImageDraw.Draw.text相匹配?
EN

Stack Overflow用户
提问于 2022-02-20 06:08:38
回答 1查看 329关注 0票数 0

使用枕头库在图像上绘制文本,试图通过选项anchor='mm'来匹配锚定在图像中心的文本,但它看起来并不完全是图像的中心。

演示代码

代码语言:javascript
运行
复制
from PIL import Image, ImageDraw, ImageFont

im = Image.new("RGBA", (500, 500), (255, 255, 255, 255))
font = ImageFont.truetype(font='arial.ttf', size=320)
draw = ImageDraw.Draw(im)
draw.text((250, 250), "123", font=font, fill='black', anchor='mm')
im.show()

结果:

预期:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-20 13:23:16

文本看起来不对齐的原因是因为在1的左边有一个小的边距,而枕头将对齐文本,包括这个边距。

在两端添加0将显示它是正确的居中,并且在1中有很大的空白。

如果要对齐除页边距以外的文本,ImageFont.getmask是有帮助的。

代码语言:javascript
运行
复制
def get_offset_for_true_mm(text, draw, font):
    anchor_bbox = draw.textbbox((0, 0), text, font=font, anchor='lt')
    anchor_center = (anchor_bbox[0] + anchor_bbox[2]) // 2, (anchor_bbox[1] + anchor_bbox[3]) // 2
    mask_bbox = font.getmask(text).getbbox()
    mask_center = (mask_bbox[0] + mask_bbox[2]) // 2, (mask_bbox[1] + mask_bbox[3]) // 2
    return anchor_center[0] - mask_center[0], anchor_center[1] - mask_center[1]


im = Image.new("RGBA", (500, 500), (255, 255, 255, 255))
font = ImageFont.truetype(font='arial.ttf', size=320)
draw = ImageDraw.Draw(im)
text = "123"
offset = get_offset_for_true_mm(text, draw, font)
draw.text((250 + offset[0], 250 + offset[1]), text, font=font, fill='black', anchor='mm')
im.show()

结果:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71191762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档