- Python Pillow 教程
- Python Pillow - 首页
- Python Pillow - 概述
- Python Pillow - 环境设置
- 基本图像操作
- Python Pillow - 图像处理
- Python Pillow - 调整图像大小
- Python Pillow - 翻转和旋转图像
- Python Pillow - 裁剪图像
- Python Pillow - 为图像添加边框
- Python Pillow - 识别图像文件
- Python Pillow - 合并图像
- Python Pillow - 剪切和粘贴图像
- Python Pillow - 滚动图像
- Python Pillow - 在图像上写入文本
- Python Pillow - ImageDraw 模块
- Python Pillow - 合并两张图像
- Python Pillow - 创建缩略图
- Python Pillow - 创建水印
- Python Pillow - 图像序列
- Python Pillow 颜色转换
- Python Pillow - 图像上的颜色
- Python Pillow - 使用颜色创建图像
- Python Pillow - 将颜色字符串转换为 RGB 颜色值
- Python Pillow - 将颜色字符串转换为灰度值
- Python Pillow - 通过更改像素值来更改颜色
- 图像处理
- Python Pillow - 降噪
- Python Pillow - 更改图像模式
- Python Pillow - 图像合成
- Python Pillow - 使用 Alpha 通道
- Python Pillow - 应用透视变换
- 图像滤镜
- Python Pillow - 为图像添加滤镜
- Python Pillow - 卷积滤镜
- Python Pillow - 模糊图像
- Python Pillow - 边缘检测
- Python Pillow - 浮雕图像
- Python Pillow - 增强边缘
- Python Pillow - 锐化蒙版滤镜
- 图像增强和校正
- Python Pillow - 增强对比度
- Python Pillow - 增强锐度
- Python Pillow - 增强色彩
- Python Pillow - 校正色彩平衡
- Python Pillow - 去噪
- 图像分析
- Python Pillow - 提取图像元数据
- Python Pillow - 识别颜色
- 高级主题
- Python Pillow - 创建动画 GIF
- Python Pillow - 批量处理图像
- Python Pillow - 转换图像文件格式
- Python Pillow - 为图像添加填充
- Python Pillow - 颜色反转
- Python Pillow 与 NumPy 结合使用
- Python Pillow 与 Tkinter BitmapImage 和 PhotoImage 对象结合使用
- Image 模块
- Python Pillow - 图像混合
- Python Pillow 有用资源
- Python Pillow - 快速指南
- Python Pillow - 函数参考
- Python Pillow - 有用资源
- Python Pillow - 讨论
Python Pillow - ImageDraw 模块
在 Pillow 中绘制图像涉及使用 Pillow 库(Python Imaging Library)向现有图像添加各种视觉元素,例如线条、形状、文本等等。这是图像处理中的一项常见任务,用于图像标注、创建可视化效果、添加标签或标题以突出感兴趣的区域等。
我们可以使用 Pillow 中的 ImageDraw 模块创建一个绘图对象,然后使用该对象的各种方法在图像上进行绘制。我们可以使用 line()、rectangle()、ellipse()、text() 等方法在图像上绘制各种元素。
在图像上绘制文本
为了在图像上绘制或写入文本,我们可以使用 Pillow 库中的 ImageDraw.Draw() 函数,此方法创建一个绘图对象,允许我们对图像执行绘图操作。
语法
以下是 Draw() 方法的语法和参数:
PIL.ImageDraw.Draw(image, mode=None)
其中,
image − 此参数表示我们要在其上执行绘图操作的图像。它是 Pillow Image 对象的一个实例。
mode (可选) − 此参数指定绘图将发生的模式。可用的模式包括:
- 1 − 1 位像素(单色)
- L − 8 位像素,黑白
- RGB − 3x8 位像素,真彩色
- RGBA − 4x8 位像素,带透明度
- CMYK − 4x8 位像素,CMYK 颜色空间
- HSV − 3x8 位像素,HSV 颜色空间
以下两个示例将使用的输入图像。
示例
在这个例子中,我们使用 ImageDraw 模块的 Draw() 方法在图像上添加文本。
from PIL import Image, ImageDraw, ImageFont #Open an image image = Image.open("Images/faces.jpg") #Create a drawing object draw = ImageDraw.Draw(image) #Define text attributes text = "Welcome to Tutorialspoint" font = ImageFont.truetype("arial.ttf", size=30) text_color = (0, 0, 255) #Blue text_position = (50, 50) #Add text to the image draw.text(text_position, text, fill=text_color, font=font) #Save or display the image with the added drawing elements image.save("output Image/drawnimage.jpg") #Open the output drawn image opendraw = Image.open("output Image/drawnimage.jpg") opendraw.show()
输出
示例
这是另一个使用 Draw() 方法在图像中间添加文本的示例。
from PIL import Image, ImageDraw, ImageFont #Open an image image = Image.open("Images/faces.jpg") #Create a drawing object draw = ImageDraw.Draw(image) #Define text attributes text = "Welcome to Tutorialspoint" font = ImageFont.truetype("arial.ttf", size=30) text_color = (255, 0, 0) #Add text to the image draw.text(xy=(25, 160), text = text, font = font, fill= text_color) #Save or display the image with the added drawing elements image.save("output Image/drawnimage.jpg") #Open the output drawn image opendraw = Image.open("output Image/drawnimage.jpg") opendraw.show()
输出
在图像上绘制矩形
在 Pillow 库 (PIL) 中,PIL.ImageDraw.Draw.rectangle() 方法用于使用指定的轮廓和填充颜色在图像上绘制矩形。此方法是 ImageDraw 模块的一部分,通常在使用 PIL.ImageDraw.Draw() 创建的 ImageDraw 对象上调用。
语法
以下是 PIL.ImageDraw.Draw.rectangle() 方法的语法和参数:
ImageDraw.Draw.rectangle(xy, outline=None, fill=None, width=0)
其中,
xy − 此参数指定矩形的坐标,作为两个点的元组。每个点表示为 (x1, y1) 和 (x2, y2),其中 (x1, y1) 是矩形的左上角,(x2, y2) 是矩形的右下角。
outline − 此参数是可选的,指定矩形轮廓的颜色。我们可以提供一个颜色字符串(例如,“red” 或 "#FF0000")或表示 RGB 颜色的元组(例如,(255, 0, 0))。如果设置为 None,则不绘制轮廓。
fill − 此参数是可选的,指定填充矩形的颜色。与 outline 参数一样,我们可以将填充颜色指定为字符串或 RGB 元组。如果设置为 None,则矩形不会被填充。
width − 这是一个可选参数,用于指定矩形轮廓的宽度。默认值为 0,这意味着矩形将被填充而没有轮廓。
以下两个示例将使用的输入图像。
示例
在这个例子中,我们使用 PIL.ImageDraw.Draw.rectangle() 方法在给定的输入图像上绘制一个矩形。
from PIL import Image, ImageDraw #Open an image image = Image.open("Images/bw.png") #Create a drawing object draw = ImageDraw.Draw(image) #Define the coordinates for the rectangle xy = [(100, 100), (200, 200)] #Draw a filled red rectangle draw.rectangle(xy, outline="blue", fill="red", width = 3) #Save or display the modified image image.save("output Image/output.jpg") image.show()
输出
示例
这是另一个绘制矩形的示例,将 outline 参数指定为 Blue,fill 参数指定为 None。
from PIL import Image, ImageDraw #Open an image image = Image.open("Images/bw.png") #Create a drawing object draw = ImageDraw.Draw(image) #Define the coordinates for the rectangle xy = [(100, 100), (200, 200)] #Draw a filled red rectangle draw.rectangle(xy, outline= "Blue", fill= None, width = 2) #Save or display the modified image image.save("output Image/output.jpg") image.show()
输出
在图像上绘制线条
PIL.ImageDraw.Draw.line() 是 Python Imaging Library (PIL) 或 Pillow 库提供的方法。Pillow 是 PIL 的一个更现代且积极维护的分支,用于在图像上绘制线条。此方法是 PIL/Pillow 中用于在图像上绘制形状、文本和其他图形的 ImageDraw 模块的一部分。
语法
以下是 PIL.ImageDraw.Draw.line() 方法的语法:
PIL.ImageDraw.Draw.line(xy, fill=None, width=0, joint=None)
其中,
xy − 指定线段端点的 (x, y) 坐标序列。
fill − 此参数是可选的,指定线条的颜色。它可以是指定颜色名称的字符串、(R, G, B) 元组或整数值。如果没有指定,线条将为黑色。
width − 此参数是可选的,指定线条的宽度(以像素为单位)。默认值为 0,这意味着线条的宽度为 1 像素。
joint − 此参数是可选的,可用于指定线条的连接样式。它可以是以下值之一:
None (默认) − 线条具有常规连接。
curve − 线条具有圆形连接。
miter − 线条具有尖角连接。
以下两个示例将使用的输入图像。
示例
在这个例子中,我们使用 PIL.ImageDraw.Draw.line() 方法在输入图像上绘制一条线。
from PIL import Image, ImageDraw, ImageFont #Open an image image = Image.open("Images/faces.jpg") #Create a drawing object draw = ImageDraw.Draw(image) #Draw a line line_coordinates = [(100, 200), (200, 200)] draw.line(line_coordinates,width=10) #Save or display the image with the added drawing elements image.save("output Image/drawnimage.jpg") #Open the output drawn image opendraw = Image.open("output Image/drawnimage.jpg") opendraw.show()
输出
示例
这是另一个使用 PIL.ImageDraw.Draw.line() 方法的示例,将 joint 参数指定为 curve。
from PIL import Image, ImageDraw #Open an image image = Image.open("Images/faces.jpg") #Create a drawing object draw = ImageDraw.Draw(image) #Define the endpoints and draw a red line line_color = "Yellow" #Red color start_point = (0, 10) end_point = (200, 500) line_width = 3 draw.line([start_point, end_point], fill=line_color, width=line_width, joint = "curve") #Save or display the modified image image.save("output.jpg") image.show()
输出
在图像上绘制多边形
PIL.ImageDraw.Draw.polygon() 是 Pillow 库中 ImageDraw 对象提供的方法。它允许我们在图像上绘制多边形。多边形是一个具有多条边的封闭形状,因此我们可以指定顶点的坐标来定义多边形的形状。
此方法是 ImageDraw.Draw 对象的一部分,用于创建并使用指定的颜色填充多边形形状。
语法
以下是 PIL.ImageDraw.Draw.polygon() 方法的语法:
PIL.ImageDraw.Draw.polygon(xy, fill=None, outline=None)
其中,
xy − 这是一个元组列表或坐标的扁平列表,指定多边形的顶点。每个元组或坐标对代表多边形的一个顶点。
fill − 此参数是可选的,指定多边形内部的填充颜色。如果我们想要多边形没有填充,我们可以将其设置为 None。
outline − 此参数是可选的,指定多边形轮廓或边框的颜色。如果我们不想要轮廓,则可以将其设置为 None。
以下两个示例将使用的输入图像。
示例
在这个例子中,我们使用 PIL.ImageDraw.Draw.polygon() 方法在图像上绘制一个多边形,并指定参数 xy、fill 和 outline。
from PIL import Image, ImageDraw #Open an image image = Image.open("Images/bw.png") #Create a drawing object draw = ImageDraw.Draw(image) #Define the vertices of the polygon polygon_vertices = [(100, 100), (200, 100), (150, 200)] #Draw a filled polygon with a blue interior and a red outline draw.polygon(polygon_vertices, fill="blue", outline="red") #Save or display the modified image image.save("output Image/output.jpg") image.show()
输出
示例
这是一个另一个示例,其中我们将 PIL.ImageDraw.Draw.polygon() 方法的 fill 参数设置为 None 以避免填充多边形。
from PIL import Image, ImageDraw #Open an image image = Image.open("Images/bw.png") #Create a drawing object draw = ImageDraw.Draw(image) #Define the vertices of the polygon polygon_vertices = [(100, 100), (200, 100), (150, 200),(100,150),(90,100)] #Draw a filled polygon with a blue interior and a red outline draw.polygon(polygon_vertices, fill= None, outline="red") #Save or display the modified image image.save("output Image/output.jpg") image.show()
输出
ImageDraw 模块方法
除了上述方法之外,此模块还提供许多其他特定方法,可用于特定条件。让我们探索并了解每种方法的基本功能:
序号 | 方法及描述 |
---|---|
1 |
在指定的边界框内绘制一个弧形。 |
2 |
在边界框内绘制一条弦(圆的一部分)。 |
3 |
在边界框内绘制一个填充的扇形。 |
4 |
在图像上指定坐标处绘制点(单个像素)。 |
5 |
使用给定的边界圆绘制一个正多边形。 |
6 |
绘制一个圆角矩形。 |
7 |
在图像上的指定位置绘制多行文本。 |