- 主要解决在图片上面写的文字并把文字居中显示
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")