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)
# 创建一个空白图像(白色背景)
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")
# 创建空白图像
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 模块!
点我分享笔记