我有图像的宽度和高度。
img = Image.open(img_src)
width, height = img.size
font = ImageFont.truetype("MuseoSansCyrl_0.otf", 100)
text_w, text_h = draw.textsize(title, font)
我正在尝试找到一种在底部中间向图像添加文本的通用方法。
这是我写的函数:
def process_img(img_src, title, background):
img = Image.open(img_src, 'r')
draw = ImageDraw.Draw(img)
w, h = img.size
font = ImageFont.truetype("MuseoSansCyrl_0.otf", 100)
text_w, text_h = draw.textsize(title, font)
draw.text((REQ_WIDTH, REQ_HEIGHT), title, (255,255,255), font=font)
img.save(img_src)
return img_src
有什么方法可以获得REQ_WIDTH和REQ_HEIGHT吗?
答案 0 :(得分:2)
您所需变量的名称 - REQ_WIDTH
和REQ_HEIGHT
- 有点误导,因为它们不是宽度和高度。
你只需要做一些数学运算:
X_POS = h - text_h
Y_POS = w//2 - text_w//2 # or (w - text_w) // 2
draw.text((X_POS, Y_POS), title, (255,255,255), font=font)
答案 1 :(得分:1)
您已经拨打了draw.textsize
,它会返回最终文本的宽度和高度 - 从那时起,您只需要计算左上角的位置,就像这样渲染您的文字:
Top将是你的image_height - text_height,left将是你的image_width / 2 - text_width / 2 - 因此,你的渲染调用变得简单:
draw.text(((w - text_2) // 2, h - text_h), title, (255,255,255), font=font)
(注意draw.text
包含一个可选的“anchor”参数 - 但是它的可能值没有记录,文档也说明它是否实际实现。如果是实现的话,并且有一个值(horizontal_center,bottom)作为Anchor,您只需要传递image_width / 2和image_height,而无需调用draw.textsize
)