python ImageDraw类实现几何图形的绘制与文字的绘制

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,我们可以方便地在图像上添加各种几何图形和文字,为图像处理和图像识别等任务提供了便利。

后端开发标签