Python图像处理-使用PIL模块在图片上生成的文字居中显示

  • 主要解决在图片上面写的文字并把文字居中显示

PIL 安装

pip install pillow
  • 初始图片
  • 在这里插入图片描述

基本使用

# 导入需要的包
from PIL import Image, ImageDraw
  • 使用Image.open(图片路径)读取图片
pil_image = Image.open("./timg.jpg")
# pil_image 接收住这个图片对象
  • 使用size方法可以计算图片的像素
# width 为图片的宽, height为图片的高
width, height = pil_image.size
  • 使用Image.new生成一个新的画布,暂且就叫他画布
# 生成一张尺寸为 width * height  背景色为白色的图片
bg = Image.new('RGB', (width, height ), color=(255,255,0))
# 第一个参数应该是类型, 暂时不太了解,
# 第二个参数为画布的尺寸(像素),要传一个元祖 
# 第三个为颜色,这个颜色也可以使用其它方法代表比如16进制
  • 使用paste方法把刚才读取的文件写入到画布中
 bg.paste(pil_image , (0, 0))  # 写入底图
 # 第一个参数为图片
 # 第二个参数为图片的要从哪里开始写入,
 # 比如一个150*150的图片, 左上角为(0,0),右下角为(150,150)

文字居中

  • 本文重点来了----写入文字居中

    设置完字体后,使用getsize方法拿到文本占用的像素

word = "如果有一天"   # 写入的文字
# word = word.decode('utf-8')  # 这里吧文本就是编下码, 有时候写入的时候会乱码
# 使用ImageFout.truetype("字体", "文字大小(像素px)")
SimHei = "./SimHei.TTF"    # 一个字体文件
font = ImageFont.truetype(SimHei, 50)  # 设置字体和大小
# 计算出要写入的文字占用的像素
w, h = font.getsize(word)   #
# 创建一个可以在给定图像上绘图的对象
draw = ImageDraw.Draw(bg)
"""
####  (width-w)/2, height/2
画布的宽减去写入文字占用的像素的宽除以2,得到文字写入的初始位置, height想让文字写在哪个高度
fill 为字体颜色
"""
draw.text(((width-w)/2, height/2), word, fill="#78e830", font=font)
# 保存画布
bg.save("hello_PIL.png", "PNG")
  • 完成时的图片
  • 在这里插入图片描述
    完整代码
# 导入需要的包
from PIL import Image, ImageFont, ImageDraw

# 读取图片
pil_image = Image.open("./timg.jpg")
# pil_image 接收住这个图片对象
# width 为图片的宽, height为图片的高
width, height = pil_image.size

# 生成一张尺寸为 width * height  背景色为白色的图片
bg = Image.new('RGB', (width, height), color=(255,255,0))

bg.paste(pil_image, (0, 0))  # 写入底图

word = "如果有一天"   # 写入的文字
# word = word.decode('utf-8')  # 这里吧文本就是编下码, 有时候从数据库中拿出来的数据写入的时候会乱码
# 使用ImageFout.truetype("字体", "文字大小(像素px)")
SimHei = "./SimHei.TTF"    # 一个字体文件
font = ImageFont.truetype(SimHei, 50)  # 设置字体和大小
# 计算出要写入的文字占用的像素
w, h = font.getsize(word)   #
# 创建一个可以在给定图像上绘图的对象
draw = ImageDraw.Draw(bg)
draw.text(((width-w)/2, height/2), word, fill="#78e830", font=font)
# 保存画布
bg.save("hello_PIL.png", "PNG")


猜你喜欢

转载自blog.csdn.net/lxb_wyf/article/details/111304692