失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Python图像处理-使用PIL模块在图片上生成的文字居中显示

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

时间:2019-08-28 18:12:34

相关推荐

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")

如果觉得《Python图像处理-使用PIL模块在图片上生成的文字居中显示》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。