1. 简介
ImageDraw是Python Imaging Library(PIL)中的类之一,用于在给定的图像上绘制几何图形和文字。ImageDraw类允许我们在图像上添加各种几何形状,例如矩形、圆形、梯形等,并在这些形状中填充颜色和纹理。此外,我们还可以在图像上添加文本和内嵌图像。
2. 安装
在使用ImageDraw之前,请确保已安装Python Imaging Library(PIL)。可以通过以下命令安装Pillow,后续代码中将使用Pillow,而不是PIL。
pip install Pillow
3. 几何图形的绘制
3.1 绘制直线
要在图像上绘制一条直线,我们需要指定线的起始坐标和结束坐标。可以使用ImageDraw.line()方法来绘制直线。
from PIL import Image, ImageDraw
# 创建画布
im = Image.new('RGB', (300, 300), 'white')
# 创建画笔
draw = ImageDraw.Draw(im)
# 绘制直线
draw.line((50, 50, 250, 50), fill='red', width=5)
# 显示图片
im.show()
上面的代码将在一张白色背景的画布上绘制一条红色直线,从(50, 50)到(250, 50),宽度为5个像素。
注意:这里第一个坐标是(50, 50),而不是(0, 0)。因为ImageDraw使用左上角作为原点。因此,如果想要在画布的中间绘制一条线,可以如下所示:
# 绘制直线
draw.line((150, 150, 150, 250), fill='red', width=5)
3.2 绘制矩形
要在图像上绘制一个矩形,我们需要指定矩形的左上角坐标和右下角坐标。可以使用ImageDraw.rectangle()方法来绘制矩形。该方法的参数与ImageDraw.line()方法相同,唯一的区别是它只需要两个坐标(即左上角和右下角)。
# 绘制矩形
draw.rectangle((50, 50, 250, 250), outline='red', width=5)
# 显示图片
im.show()
上面的代码将在一张白色背景的画布上绘制一个红色的矩形,左上角坐标为(50, 50),右下角坐标为(250, 250),边框宽度为5个像素。
注意:如果想要填充矩形,可以使用ImageDraw.rectangle()方法的fill参数。
# 绘制填充矩形
draw.rectangle((50, 50, 250, 250), fill='red')
3.3 绘制圆形
要在图像上绘制一个圆形,我们需要指定圆心坐标和半径。可以使用ImageDraw.ellipse()方法来绘制圆形。该方法的参数与ImageDraw.rectangle()方法相同,不同之处在于它绘制的是圆形而不是矩形。
# 绘制圆形
draw.ellipse((50, 50, 250, 250), outline='red', width=5)
# 显示图片
im.show()
上面的代码将在一张白色背景的画布上绘制一个红色的圆形,圆心坐标为(150, 150),半径为100像素,边框宽度为5个像素。
3.4 绘制多边形
要在图像上绘制一个多边形,我们需要指定多边形的各个顶点坐标。可以使用ImageDraw.polygon()方法来绘制多边形。该方法的参数是一个包含多个点的元组。
# 绘制多边形
points = [(50, 50), (150, 250), (250, 50)]
draw.polygon(points, outline='red', width=5)
# 显示图片
im.show()
上面的代码将在一张白色背景的画布上绘制一个红色的三角形,其三个顶点分别为(50, 50)、(150, 250)和(250, 50),边框宽度为5个像素。
4. 文字的绘制
要在图像上添加文字,我们需要指定文本内容、字体、字号、颜色和位置。可以使用ImageDraw.text()方法来添加文本。
# 添加文本
text = 'Hello, World!'
font = ImageFont.truetype('arial.ttf', 20)
draw.text((100, 100), text, font=font, fill='red')
# 显示图片
im.show()
上面的代码将在一张白色背景的画布上添加一段红色的文本。文本内容为"Hello, World!",字体为Arial,大小为20,位置为(100, 100)。
注意:需要先安装对应的字体。上面的代码使用了Arial字体,如果你的电脑上没有安装Arial字体,可能会出现无法添加文本的情况。
4.1 中文文字的绘制
要在图像上添加中文文字,我们需要使用中文字体,例如SimSun、SimHei等。可以通过以下命令查看已安装的中文字体:
import matplotlib.font_manager as fm
for f in fm.fontManager.ttflist:
if 'Sim' in f.name:
print(f.name)
例如,如果我们要使用宋体(SimSun)来添加中文文字,可以用以下代码:
# 添加中文文本
text_cn = '你好,世界!'
font_cn = ImageFont.truetype('SimSun.ttc', 20) # 使用宋体字体
draw.text((100, 150), text_cn, font=font_cn, fill='blue')
# 显示图片
im.show()
上面的代码将在画布上添加一段蓝色的中文文本。文本内容为"你好,世界!",字体为宋体,大小为20,位置为(100, 150)。
5. 总结
本文中,我们介绍了ImageDraw类的使用方法,包括绘制直线、矩形、圆形、多边形和文本。通过ImageDraw,我们可以方便地在图像上添加各种几何图形和文字,为图像处理和图像识别等任务提供了便利。