Pillow
是Python中一个常用的图像处理库,这篇文章我们就来介绍一下如何通过Pillow来实现在图片上绘制各种图像
以及文字
。
pip install Pillow
在使用PIL
在图片上绘制文字的时候,需要先准备一个字体文件,这里我们使用SimHei.ttf
字体文件下载地址:SimHei.ttf字体下载
from PIL import Image,ImageFont,ImageDraw
def draw_text():
#加载字体文件
font_style = ImageFont.truetype("font/SimHei.ttf", 20, encoding="utf-8")
#创建一张底图,用来绘制文字
img = Image.new("RGB",(300,300),(255,255,255))
draw = ImageDraw.Draw(img)
#在图片上添加文字
#fill用来设置绘制文字的颜色,(R,G,B)
draw.text((100,100),"Python",fill=(255,0,0),font=font_style)
draw.text((100,200),"你好",fill=(0,255,0),font=font_style)
#保存图片
img.save("draw_img.jpg")
draw_text()
xy
:用来设置矩形的起点(左上角)和终点(右下角)坐标,格式(x1,y1,x2,y2)
或((x1,y1),(x2,y2))
fill
:用来填充矩形内部的颜色,默认是None表示不填充,填充颜色采用RGB(R,G,B)或Grayscale(L)格式outline
:用来设置矩形边框的颜色,和fill参数相同width
:设置矩形边框的长度,默认是0def draw_rectangle():
# 创建一张底图,用来绘制
img = Image.new("RGB", (300, 300), (128, 128, 128))
draw = ImageDraw.Draw(img)
#绘制矩形
draw.rectangle((100,100,120,150),fill=(0,255,0),outline=(255,0,0))
#绘制正方形
draw.rectangle(((200,200),(250,250)),fill=None,outline=(0,0,255),width=5)
img.save("draw_img.jpg")
ellipse
函数中的xy
参数表示的是椭圆
的外接矩形的顶点坐标左上角和右下角,当外接矩形为正方形
时,此时绘制的椭圆会变成一个圆
def draw_ellipse():
# 创建一张底图,用来绘制
img = Image.new("RGB", (300, 300),(255,255,255))
draw = ImageDraw.Draw(img)
# 绘制椭圆形
draw.ellipse((100, 100, 120, 150), fill=(0, 255, 0), outline=(255, 0, 0))
# 绘制圆形
draw.ellipse(((200, 200), (250, 250)), fill=None, outline=(0, 0, 255), width=5)
img.save("draw_img.jpg")
xy
参数表示的是左上角和右下角,通过增加start
和end
两个参数用来控制绘制饼图的角度范围
def draw_pieslice():
# 创建一张底图,用来绘制
img = Image.new("RGB", (600, 300),(128,128,128))
draw = ImageDraw.Draw(img)
#start和end表示开始和结束的角度
#绘制圆弧
draw.arc((25, 50, 175, 200), start=30, end=270, fill=(255, 255, 0))
#绘制弦
draw.chord((225, 50, 375, 200), start=30, end=270, fill=(255, 255, 0), outline=(0, 0, 0))
#绘制饼图
draw.pieslice((425, 50, 575, 200), start=30, end=270, fill=(255, 255, 0), outline=(0, 0, 0))
img.save("draw_img.jpg")
def draw_line():
# 创建一张底图,用来绘制
img = Image.new("RGB", (600, 300),(128,128,128))
draw = ImageDraw.Draw(img)
#绘制直线
draw.line(((30, 200), (130, 100), (80, 50)), fill=(255, 255, 0))
draw.line(((80, 200), (180, 100), (130, 50)), fill=(255, 255, 0), width=10)
#绘制多边形
draw.polygon(((200, 200), (300, 100), (250, 50)), fill=(255, 255, 0), outline=(0, 0, 0))
#绘制点,点的pixel为1,如果觉得太小可以使用绘制圆来替代
draw.point(((350, 200), (450, 100), (400, 50)), fill=(255, 255, 0))
#绘制大一点的点,绘制一个半径为3的点
draw.ellipse(((500, 200),(506, 206)), fill=(255, 0, 0))
img.save("draw_img.jpg")