PIL:在图像的底部中间添加文本

时间:2016-06-20 13:42:36

标签: python image image-processing fonts python-imaging-library

我有图像的宽度和高度。

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吗?

2 个答案:

答案 0 :(得分:2)

您所需变量的名称 - REQ_WIDTHREQ_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”参数 - 但是它的可能值没有记录,文档也说明它是否实际实现。如果实现的话,并且有一个值(horizo​​ntal_center,bottom)作为Anchor,您只需要传递image_width / 2和image_height,而无需调用draw.textsize