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