转载请注明出处:http://blog..net/jinixin/article/details/79115782
关于画图,Python不乏许多优秀的第三方库能支持操作图片,比如Matplotlib、Pillow等。这些库可以对给定图片做各种各样的修饰,甚至是直接创建新图片。今天我就尝试用Pillow来制作一张透明背景的图片,并在图片上写一句话。
模块
在画图过程中,我主要使用了Pillow的Image、ImageDraw、ImageFont三个模块,下面对它们简单介绍:
Image:构建一个image对象,你可以通过new或是从现有文件中加载来创建它
ImageDraw:为image对象提供简单的平面图形。我把它理解成画笔,可以操作它在image对象上加线条,加文字等
ImageFont:设置字体的属性。由于使用到绘文字,所以需使用该模块对字体做些调整
直接上代码:
#!/usr/bin/env python
# coding=utf-8
from PIL import Image, ImageDraw, ImageFont
image = Image.new(mode='RGBA', size=(400, 50))
draw_table = ImageDraw.Draw(im=image)
draw_table.text(xy=(0, 0), text=u'仰起脸笑得像满月', fill='#008B8B', font=ImageFont.truetype('./SimHei.ttf', 50))
image.show() # 直接显示图片
image.save('满月.png', 'PNG') # 保存在当前路径下,格式为PNG
image.close()
运行代码,便能看到生成的图片。其中SimHei字体文件我上传到了百度云,提取码“4uhw”,点击这里下载。如果你介意生成的透明背景图上面的文字带有深色轮廓,可以看这篇文章去除。
方法
代码不是很长,下面简单解释代码中用到的几个方法:
1)PIL.Image.new(mode, size, color=0)
通过给定的mode创建指定大小的image对象
mode参数:定义了图像中关于像素的一些属性。比较常见的有:黑白图像L,真彩色RGB,带透明度的真彩色RGBA等,具体看这里吧
size参数:以像素为单位指定图片的长与宽,tuple形式
color参数:指定图片的背景色。当图像模式为RGBA时,若不指定该参数,默认便是透明背景
2)PIL.ImageDraw.Draw(im, mode=None)
创建一个对象用于在image对象上进行作画
im参数:已创建的image对象
mode参数:定义了图像中关于像素的一些属性。若未给定,将与传入的image对象的mode参数保持一致
3)PIL.ImageDraw.ImageDraw.text(xy, text, fill=None, font=None, direction=None)
在图片指定位置写一行文本,多行文本需要使用multiline_text方法
xy参数:指定文本距左上角的位置,tuple形式
text参数:文本内容
fill参数:文本颜色,支持英文单词与十六进制表示法
font参数:字体对象,一般通过ImageFont模块构建,用于指定字体文件位置与字体大小
direction参数:文本内容方向,需要libraqm支持
(该方法还有其他参数,具体请点击这里)
参考资料:
Pillow 4.2 文档
文中如有不当之处,还望大家包容和指出,感谢