侧边栏壁纸
博主头像
波哥

大龄程序猿&自由职业者&副业达人
爱好:敲代码、搞副业
12+年开发经验,热衷自动化网络推广!

  • 累计撰写 1,810 篇文章
  • 累计创建 77 个标签
  • 累计收到 13 条评论

目 录CONTENT

文章目录

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

波哥
2021-12-21 / 0 评论 / 0 点赞 / 273 阅读 / 0 字

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

0

评论区