You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用Python PIL库在指定矩形区域内居中绘制文本?

在PIL中指定矩形区域居中绘制文本的解决方案

当然可以!完全不用自己手动折腾文本长度的计算——PIL已经提供了现成的方法来帮你搞定这个需求,下面我一步步给你演示怎么实现。

核心思路很简单:先获取待绘制文本的边界尺寸,再结合你给定的矩形区域,计算出文本在区域内居中的坐标,最后调用draw.text()绘制就行。

完整实现代码

我基于你原来的代码做了修改,加入了居中逻辑:

from PIL import Image, ImageDraw, ImageFont

# 打开图片并初始化绘图对象
image = Image.open('Test.png')
draw = ImageDraw.Draw(image)

# 设置字体、颜色和文本
font = ImageFont.truetype("Dharma.otf", 45)
color1 = 'rgb(0,0,0)'
text = "Test Text"

# 定义你的目标矩形区域:左上角和右下角坐标
rect_top_left = (261, 149)
rect_bottom_right = (600, 220)  # 替换成你实际的右下角坐标

# 获取文本的边界框(PIL 9.1.0+推荐使用textbbox)
text_bbox = draw.textbbox((0, 0), text, font=font)
text_width = text_bbox[2] - text_bbox[0]
text_height = text_bbox[3] - text_bbox[1]

# 计算矩形区域的中心点
rect_center_x = (rect_top_left[0] + rect_bottom_right[0]) / 2
rect_center_y = (rect_top_left[1] + rect_bottom_right[1]) / 2

# 计算文本的左上角坐标,实现水平+垂直居中
text_x = rect_center_x - text_width / 2
text_y = rect_center_y - text_height / 2

# 绘制居中文本
draw.text((text_x, text_y), text, fill=color1, font=font)

# 保存或预览图片
image.save('Test_with_centered_text.png')
# image.show()

版本兼容说明

如果你的PIL版本低于9.1.0,textbbox()方法还未推出,可以用已被弃用但仍能工作的textsize()方法替代获取文本尺寸:

# 替换textbbox的部分
text_width, text_height = draw.textsize(text, font=font)

不过还是建议你升级到最新版PIL,因为textsize()在新版本中已经被标记为废弃,未来可能会被移除。

这样操作下来,文本就会完美居中在你指定的矩形区域里,不用再手动计算字符长度啦!

内容的提问来源于stack exchange,提问作者KaanKara

火山引擎 最新活动