PIL处理图片将文字放置在图片中间

PIL处理图片将文字放置在图片中间

PIL处理图片将文字放置在图片中间

一、需求

使用PIL处理图片写入文字,并将他图片中的文字居中。

二、实现

使用Draw.textsize计算文字大小并设置位置。

from PIL import Image, ImageDraw

W, H = (300,200)
msg = "hello"
title_font = ImageFont.truetype(font_kechengxinxi, 30)
im = Image.new("RGBA",(W,H),"yellow")
draw = ImageDraw.Draw(im)
w, h = draw.textsize(msg,title_font)
draw.text(((W-w)/2,(H-h)/2), msg, fill="black")

im.save("hi.png", "JPEG")

三、报错解决

报错:

UnicodeEncodeError: ‘latin-1’ codec can’t encode characters in position 6-8: ordinal not in range(256)

image

对文字先encode,再decode即可。

    w, h = draw.textsize(title.encode("utf-8").decode("latin1"))

或者,指定textsize字体:

title_font = ImageFont.truetype(font_kechengxinxi, 30)
w, h = draw.textsize(title,title_font)
title_x = 138
title_y = 39
image_w = 800
image_h= 309
draw.text(((image_w-w)/2, title_y), u'%s' % (title), color, title_font)

这里我采用第二种方法,指定字体,可以避免拉丁编码的问题,其实报错也是因为字体的原因。

大T笔记所有文章均为本人原创,转载请您注明来源,并留下原文链接地址,是对我的尊重,也是对知识的尊重,谢谢!
大T笔记 » PIL处理图片将文字放置在图片中间

大T笔记-我的个人互联网创业和自由职业之路

关于我 我的百宝箱
大T笔记-专注个人互联网创业和自由职业