前言
我们之前做数据可视化分享的时候,讲解了使用 pyecharts 绘制图像的方法,比如绘制柱状图,饼状图,折线图等,但是,我们如果要绘制不定形状的图像,应该怎么去绘制呢,当然,还是要使用到我们的神器 pillow 来绘制。下面我们就来介绍使用 pillow 来绘制各种类型的图像。
pillow 绘制图像,需要引入 ImageDraw 类来进行图像绘制。
绘制图形
绘制图形之前,我们先要生成一个底图,用来绘制我们的图形,代码如下:
from PIL import Image, ImageDraw
image = Image.new('RGB', (600, 400), 'lightgrey')
draw = ImageDraw.Draw(image)
复制代码
ImageDraw 类给我们提供了丰富的选择,支持我们绘制圆弧,饼图,折线图,矩形图,多边形等方法,下面我们来一一介绍:
绘制线形图
我们可以绘制直线和折线图,代码如下:
draw.line((50, 50, 100, 150), fill='green', width=6)
draw.line((50, 200, 75, 300, 100, 250, 75, 200), fill='red', width=10, joint='curve')
image.save('imagedraw_lines.png')
复制代码
绘制的图形如下:
绘制多边形
我们可以通过调用 polygon()和 regular_polygon 来绘制多边形和正多边形,代码如下:
draw.polygon((150, 50, 220, 150, 250, 50), fill='purple')
draw.regular_polygon((200, 300, 75), n_sides=5, rotation=10, fill='green')
image.save('imagedraw_polygon.png')
复制代码
绘制图像如下:
绘制矩形
我们可以通过 rectangle()方法来绘制矩形,代码如下:
#绘制矩形
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)
复制代码
绘制图像如下:
绘制椭圆形与圆形
我们可以使用 ellipse()方法来绘制椭圆形,代码如下:
# 绘制椭圆
draw.ellipse((300, 50, 450, 150), outline='red', width=4)
# 绘制圆形
draw.ellipse((200, 200, 250, 250), outline='blue', width=3)
复制代码
绘制的图形如下:
绘制饼状图,弧线及弦线
我们可以通过 arc()绘制弧线,通过 chord()绘制弦线,通过 pieslice()绘制饼状图,示例代码如下:
draw.arc((300, 200, 450, 350), start=90, end=200, fill='yellow', width=4)
draw.chord((400, 200, 550, 350), start=90, end=200, fill='cyan')
draw.pieslice((500, 200, 650, 350), start=90, end=200, fill='magenta')
复制代码
绘制的图像如下:
绘制文字图
Pillow 通过 ImaegFont 模块(用于选择字体)和 ImageDraw 模块提供处理文本的功能,绘制文字图形时,我们需要引入字体,可以下载或者添加系统的字体路径,指定字体,这里我们下载字体文件并导入来绘制文字图。
绘制文字图时,我们需要调用 text()方法,示例代码如下:
font_style = ImageFont.truetype("font/SimHei.ttf", 20, encoding="utf-8")
draw.text((100,100), '拜仁慕尼黑', font=font_style, fill='blue')
draw.text((200,250), 'forever no.1', font=font_style, fill='red')
复制代码
绘制图像如下:
总结
本篇文章主要介绍了使用 pillow 绘制不同形状的图形,以及绘制文字图形的方法,希望能帮助大家更了解 pillow 模块的使用,方便大家的学习和工作!
评论