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)
其中,
-
image − 此参数表示我们要对之执行绘图操作的图像。它是 Pillow Image 对象的一个实例。
-
mode (optional) − 此参数指定绘图的模式。可用模式如下 − 1 − 1 位像素(单色) L − 8 位像素,黑白*RBG* − 3 x 8 位像素,真彩色*RGBA* − 4 x 8 位像素,带透明度*CMYK* − CMYK 色彩空间中的 4 x 8 位像素*HSV* − HSV 色彩空间中的 3 x 8 位像素
输入图像,用于以下两个示例。
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()
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()
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)
其中,
-
xy − 此参数指定矩形的坐标,作为两个点的元组。每个点表示为 (x1, y1) 和 (x2, y2),其中 (x1, y1) 为矩形的左上角,(x2, y2) 为矩形的右下角。
-
outline − 此参数是可选的,指定矩形轮廓的颜色。我们可以将颜色用作字符串(例如,“红色”或 “#FF0000”)或表示 RGB 颜色的元组(例如 (255, 0, 0))。如果设置为 None,则不会绘制轮廓。
-
fill − 此参数是可选的,指定矩形填充的颜色。与轮廓参数一样,我们可以将填充颜色指定为字符串或 RGB 元组。如果设置为 None,则矩形将不会填充。
-
width − 这是指定矩形轮廓宽度的可选参数。默认值为 0,表示矩形将不带轮廓地被填充。
输入图像,用于以下两个示例。
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()
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()
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)
其中,
-
xy − 指定线段端点的 (x, y) 坐标序列。
-
fill − 此参数是可选的,用于指定线段颜色。它可以是指定颜色名称的字符串、(R, G, B) 元组或整数值。如果不指定则线段为黑色。
-
width − 此参数是可选的,指定线段宽度(以像素为单位)。默认值为 0,表示线段宽度为 1 像素。
-
joint − 此参数是可选的,用于指定线段连接处的样式。它可以是以下值之一:− None (default) − 线段为标准连接。 curve − 线段为圆角连接。 miter − 线段为尖角连接。
输入图像,用于以下两个示例。
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()
Example
示例中这是通过将连接参数指定为 curve 的 PIL.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()
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)
其中,
-
xy − 这是多边形顶点的坐标的对列表或扁平列表,每个对或坐标对表示多边形的顶点。
-
fill − 此参数是可选的,可以指定多边形内部的填充颜色。如果想让多边形没有填充,可将其设置为 None。
-
outline − 此参数是可选的,可以指定多边形的轮廓或边框的颜色。如果不需要轮廓,可以将其设置为 None。
输入图像,用于以下两个示例。
Example
在此示例中,我们使用 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()
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 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()* 在图像上的指定位置绘制多行文本。 |