Pillow ImageDraw 模块

ImageDraw 是 Python 图像处理库 Pillow(PIL 的分支)中的一个模块,用于在图像上绘制各种图形和文本。

ImageDraw 提供了丰富的绘图功能,包括线条、矩形、圆形、多边形、文本等,适用于图像标注、生成图表或简单的图形设计。

ImageDraw 模块的主要特点包括:

  • 支持在现有图像上绘制
  • 可以创建全新的空白画布
  • 提供多种绘图原语(点、线、矩形、椭圆等)
  • 支持文本绘制和字体设置
  • 允许自定义绘图颜色和样式

ImageDraw 的基本使用

创建 Draw 对象

在使用 ImageDraw 之前,需要先创建一个 ImageDraw.Draw 对象,传入一个 Image 对象作为绘图的基础。

实例

from PIL import Image, ImageDraw

# 创建一个空白图像(白色背景)
image = Image.new("RGB", (400, 300), "white")

# 创建 Draw 对象
draw = ImageDraw.Draw(image)

绘制基本图形

ImageDraw 支持多种绘图方法,例如:

  • 绘制线条line()
  • 绘制矩形rectangle()
  • 绘制圆形/椭圆ellipse()
  • 绘制多边形polygon()
  • 绘制文本text()

ImageDraw 常用方法

方法 描述 示例
line(xy, fill=None, width=1) 绘制一条线,xy 是坐标元组((x1, y1, x2, y2)) draw.line([(10, 10), (100, 50)], fill="red", width=2)
rectangle(xy, fill=None, outline=None, width=1) 绘制矩形,xy 是左上角和右下角坐标 draw.rectangle([(50, 50), (150, 150)], fill="blue", outline="black")
ellipse(xy, fill=None, outline=None, width=1) 绘制椭圆或圆形 draw.ellipse([(100, 100), (200, 200)], fill="green")
polygon(xy, fill=None, outline=None) 绘制多边形 draw.polygon([(50, 50), (100, 20), (150, 50)], fill="yellow")
text(xy, text, fill=None, font=None) 在图像上绘制文本 draw.text((50, 50), "Hello Pillow!", fill="black")
arc(xy, start, end, fill=None, width=1) 绘制圆弧 draw.arc([(50, 50), (150, 150)], 0, 90, fill="red")
chord(xy, start, end, fill=None, outline=None) 绘制弦(圆弧 + 连接线) draw.chord([(50, 50), (150, 150)], 0, 180, fill="blue")
pieslice(xy, start, end, fill=None, outline=None) 绘制扇形 draw.pieslice([(50, 50), (150, 150)], 0, 90, fill="green")
textbbox() 用于计算给定文本在图像上绘制时所占用的边界框 draw.textbbox((50, 50), "Hello Pillow!", font=font)

综合示例

以下是一个完整的示例,展示如何使用 ImageDraw 绘制多种图形和文本:

实例

from PIL import Image, ImageDraw, ImageFont

# 创建空白图像
image = Image.new("RGB", (500, 400), "white")
draw = ImageDraw.Draw(image)

# 绘制线条
draw.line([(10, 10), (490, 10)], fill="red", width=3)

# 绘制矩形
draw.rectangle([(50, 50), (150, 150)], fill="blue", outline="black")

# 绘制圆形
draw.ellipse([(200, 50), (300, 150)], fill="green")

# 绘制多边形
draw.polygon([(350, 50), (400, 100), (450, 50), (400, 150)], fill="yellow")

# 绘制文本
font = ImageFont.load_default()
draw.text((50, 200), "Hello Pillow!", fill="black", font=font)

# 保存图像
image.save("draw_example.png")

运行后,会生成一个包含多种图形的图像文件 draw_example.png


总结

ImageDraw 是 Pillow 中非常实用的绘图模块,适用于:

  • 图像标注(如添加文字、箭头)
  • 生成简单的图表或示意图
  • 自定义图形绘制

通过掌握 line()rectangle()ellipse()text() 等方法,可以轻松实现各种绘图需求。

如果你需要更高级的绘图功能,可以结合 ImageFont(字体设置)或 ImageFilter(滤镜效果)进一步扩展功能。

希望本教程能帮助你快速上手 Pillow 的 ImageDraw 模块!