Python Pillow 简明教程

Python Pillow - ImageDraw Module

利用 Pillow 中的图像,需要使用 Pillow 库(Python Imaging Library),将诸如线条、形状、文字等各种视觉元素添加到已有图像中。这是一项常见的图像处理任务,用于图像注释、创建可视化、添加标签或重点突出感兴趣区域的标题等任务。

我们可以在 Pillow 中使用 ImageDraw 模块,创建绘图对象,然后使用此对象的各种方法绘制图像。我们可以使用 line()、rectangle()、ellipse()、text() 和其他方法在图像上绘制各种元素。

Drawing Text on the Image

要在图像上绘制或书写文字,我们可以在 Pillow 库中使用 ImageDraw.Draw() 函数,此方法创建了一个绘图对象,允许我们在图像上进行绘图操作。

Syntax

以下是 Draw() 方法的语法和参数 −

PIL.ImageDraw.Draw(image, mode=None)

其中,

  1. image − 此参数表示我们要对之执行绘图操作的图像。它是 Pillow Image 对象的一个实例。

  2. mode (optional) − 此参数指定绘图的模式。可用模式如下 − 1 − 1 位像素(单色) L − 8 位像素,黑白*RBG* − 3 x 8 位像素,真彩色*RGBA* − 4 x 8 位像素,带透明度*CMYK* − CMYK 色彩空间中的 4 x 8 位像素*HSV* − HSV 色彩空间中的 3 x 8 位像素

输入图像,用于以下两个示例。

faces

Example

在此示例中,我们使用 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()
drawnimage

Example

示例中这是使用 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()
drawnimage faces

Drawing Rectangle on the Image

在 Pillow 库 (PIL) 中, PIL.ImageDraw.Draw.rectangle() 方法用于使用特定轮廓和填充颜色在图像上绘制一个矩形。此方法是 ImageDraw 模块中的一部分,通常在使用 PIL.ImageDraw.Draw() 创建的 ImageDraw 对象上调用。

Syntax

以下为 PIL.ImageDraw.Draw.rectangle() 方法的语法和参数−

ImageDraw.Draw.rectangle(xy, outline=None, fill=None, width=0)

其中,

  1. xy − 此参数指定矩形的坐标,作为两个点的元组。每个点表示为 (x1, y1) 和 (x2, y2),其中 (x1, y1) 为矩形的左上角,(x2, y2) 为矩形的右下角。

  2. outline − 此参数是可选的,指定矩形轮廓的颜色。我们可以将颜色用作字符串(例如,“红色”或 “#FF0000”)或表示 RGB 颜色的元组(例如 (255, 0, 0))。如果设置为 None,则不会绘制轮廓。

  3. fill − 此参数是可选的,指定矩形填充的颜色。与轮廓参数一样,我们可以将填充颜色指定为字符串或 RGB 元组。如果设置为 None,则矩形将不会填充。

  4. width − 这是指定矩形轮廓宽度的可选参数。默认值为 0,表示矩形将不带轮廓地被填充。

输入图像,用于以下两个示例。

black white

Example

在此示例中,我们通过使用 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()
rect output

Example

示例中这是使用 Blue 指定轮廓和 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()
rect imagedraw

Drawing Line on the Image

PIL.ImageDraw.Draw.line() 是 Python Imaging Library (PIL) 或 Pillow 库提供的函数。Pillow 是 PIL 一个更现代、更积极维护的分支,用于在图像上绘制线段。此方法是 PIL/Pillow 中用于在图像上绘制形状、文本以及其他图形的 ImageDraw 模块中的一部分。

Syntax

此处是 PIL.ImageDraw.Draw.line() 方法的语法−

PIL.ImageDraw.Draw.line(xy, fill=None, width=0, joint=None)

其中,

  1. xy − 指定线段端点的 (x, y) 坐标序列。

  2. fill − 此参数是可选的,用于指定线段颜色。它可以是指定颜色名称的字符串、(R, G, B) 元组或整数值。如果不指定则线段为黑色。

  3. width − 此参数是可选的,指定线段宽度(以像素为单位)。默认值为 0,表示线段宽度为 1 像素。

  4. joint − 此参数是可选的,用于指定线段连接处的样式。它可以是以下值之一:− None (default) − 线段为标准连接。 curve − 线段为圆角连接。 miter − 线段为尖角连接。

输入图像,用于以下两个示例。

faces

Example

在此示例中,我们通过使用 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()
lineimage

Example

示例中这是通过将连接参数指定为 curvePIL.ImageDraw.Draw.line() 方法来实现的另一个示例。

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()
lineimage draw

Drawing Polygon on the Image

PIL.ImageDraw.Draw.polygon() 是 Pillow 库中 ImageDraw 对象提供的方法。它允许我们在图像上绘制多边形。多边形是由多条边构成的封闭形状,所以我们可以指定顶点的坐标来定义多边形的形状。

此方法是 ImageDraw.Draw 对象的一部分,用于使用指定颜色创建和填充多边形形状。

Syntax

以下为 PIL.ImageDraw.Draw.polygon() 方法的语法−

PIL.ImageDraw.Draw.polygon(xy, fill=None, outline=None)

其中,

  1. xy − 这是多边形顶点的坐标的对列表或扁平列表,每个对或坐标对表示多边形的顶点。

  2. fill − 此参数是可选的,可以指定多边形内部的填充颜色。如果想让多边形没有填充,可将其设置为 None。

  3. outline − 此参数是可选的,可以指定多边形的轮廓或边框的颜色。如果不需要轮廓,可以将其设置为 None。

输入图像,用于以下两个示例。

black white

Example

在此示例中,我们使用 PIL.ImageDraw.Draw.polygon() 方法并指定 xy, filloutline 参数来绘制图像中的多边形。

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()
polygon

Example

在此处,这是另一个避免填充多边形的示例,其中我们会将 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 polygon

ImageDraw Module Methods

除了上述方法之外,此模块还提供许多其他特定方法,可用于特定条件。让我们探索并了解每种方法的基本功能−

Sr.No.

Methods with Description

1

* ImageDraw.arc()* 在指定边界框内绘制圆弧。

2

* ImageDraw.chord()* 在边界框内绘制弦(圆的一部分)。

3

* ImageDraw.pieslice()* 在边界框内绘制一个填充的饼图扇区。

4

* ImageDraw.point()* 在图像上指定坐标处绘制点(单个像素)。

5

* ImageDraw.regular_polygon()* 使用给定的边界圆绘制一个常规多边形。

6

ImageDraw.rounded_rectangle() Draws a rounded rectangle.

7

* ImageDraw.multiline_text()* 在图像上的指定位置绘制多行文本。