Python Pillow – ImageDraw模块

Python Pillow – ImageDraw模块

Python的Pillow是已停用的Python Imaging Library(PIL)的分叉,是一个强大的库,能够为你的Python代码增加图像处理能力。Pillow提供了许多模块,以减轻工作和修改图像的过程。

在这篇文章中,我们将看一下这个库的ImageDraw模块。ImageDraw提供了各种方法,正如它的名字所暗示的,在图像上绘图。在这个模块的帮助下,我们可以在图像上画线、画圆、画矩形,甚至可以在图像上书写和格式化文本。

在图像上绘制常见的形状

我们将使用的图像可以用PIL显示,如下所示。

# Importing Image and ImageDraw from PIL
from PIL import Image, ImageDraw
  
# Opening the image to
# be used and displaying it
img = Image.open('img_path.png')
img.show()

输出

Python Pillow - ImageDraw模块

输出的图像如下

我们可以使用 “画图 “方法在图像上绘制形状和数字,首先创建一个 “画图 “对象。

在图像上画一个矩形

对于绘制矩形,我们使用ImageDraw模块的矩形绘制方法。

语法: ImageDraw.rectangle(xy, fill, outline, width)

这个方法的参数是:

  • xy : 对应于包围你的形状的左上角和右下角坐标的点集的元组。这些点是以一个元组的形式传递的,如下所示。(左上角X坐标,左上角Y坐标,右下角X坐标,右下角Y坐标)
  • fill : 对应于用于填充形状的RGB颜色值的元组。
  • outline : 对应于为形状的边界分配的RGB颜色值的元组。
  • width : 对应于形状边界厚度的整数值。注意:这些参数在各种形状绘制方法中是相似的。
# Importing Image and ImageDraw from PIL
from PIL import Image, ImageDraw
  
# Opening the image to be used
img = Image.open('img_path.png')
  
# Creating a Draw object
draw = ImageDraw.Draw(img)
  
# Drawing a green rectangle
# in the middle of the image
draw.rectangle(xy = (50, 50, 150, 150),
               fill = (0, 127, 0),
               outline = (255, 255, 255),
               width = 5)
  
# Method to display the modified image
img.show()

输出:

Python Pillow - ImageDraw模块

矩形方法的输出图像

在图像上画一个椭圆(圆形)

为了绘制一个椭圆形状,我们使用ImageDraw方法中的椭圆方法。

语法: ImageDraw.ellipse(xy, fill, outline, width)

你将提供的xy坐标将作为一个盒子,圆将被围在其中。

# Importing Image and ImageDraw from PIL
from PIL import Image, ImageDraw
  
# Opening the image to be used
img = Image.open('img_path.png')
  
# Creating a Draw object
draw = ImageDraw.Draw(img)
  
# Drawing a green circle on the image
draw.circle(xy = (50, 50, 150, 150), 
            fill = (0, 127, 0),
            outline = (255, 255, 255),
            width = 5)
  
# Method to display the modified image
img.show()

输出:

Python Pillow - ImageDraw模块

椭圆法的输出图像

在图像上画一条线

为了画一条线,我们使用ImageDraw方法中的线方法。

语法: lImageDraw.ine(xy, fill, width)

在这里,不考虑轮廓参数,宽度将决定线条应该有多长。

# Importing Image and ImageDraw from PIL
from PIL import Image, ImageDraw
  
# Opening the image to be used
img = Image.open('img_path.png')
  
# Creating a Draw object
draw = ImageDraw.Draw(img)
  
# Drawing a green vertical
# line in the middle image
draw.line(xy=(50, 150, 150, 50),
          fill=(0, 128, 0), width = 5)
  
# Method to display the modified image
img.show()

输出:

Python Pillow - ImageDraw模块

线条法的输出图像

在图像上画一个多边形

我们可以通过使用ImageDraw方法中的polygon方法来绘制一个所需形状的多边形。

语法: ImageDraw.polygon(xy, fill, outline)

xy元组参数将包含基于你想要的形状的边数的坐标。这里,宽度参数是无效的。

# Importing Image and ImageDraw from PIL
from PIL import Image, ImageDraw
  
# Opening the image to be used
img = Image.open('img_path.png')
  
# Creating a Draw object
draw = ImageDraw.Draw(img)
  
# Drawing a green diamond-shaped
# polygon in the middle of the image
draw.polygon(xy=(50, 150, 150, 50),
             fill=(0, 128, 0), 
             outline=(255, 255, 255))
  
# Method to display the modified image
img.show()

输出:

Python Pillow - ImageDraw模块

多边形方法的输出图像

类似地,我们可以用这些方法画一些其他的形状:

  1. Arc: ImageDraw.arc(xy, start, end, fill, width)
  2. 弦(弓形)。ImageDraw.chord(xy, start, end, fill, outline, width)
  3. Point: ImageDraw.point(xy, fill)
  4. Pieslice: ImageDraw.pieslice(xy, start, end, fill, outline, width)

起点和终点参数对应于顺时针方向的角度程度,将用一条线连接。

在图像上书写文字

使用我们的Draw对象,我们也可以在图像上写文字。它可以用Text方法来完成。

语法: ImageDraw.text(xy, text, fill, font, anchor, spacing, align, direction, features, language, stroke_width, stroke_fill, embedded_color)

我们还将使用PIL的ImageFont来为我们的文本使用所需的字体。

# Importing Image, ImageDraw and ImageFont 
# from PIL
from PIL import Image, ImageDraw, ImageFont
  
# Opening the image to be used
img = Image.open('img_path.png')
  
# Creating an instance for
# the font to be used using ImageFont
# Here we pass the font name and
# the font size as arguments
fnt = ImageFont.truetype("Pillow/Tests/fonts/FreeMono.ttf", 20)
  
# Creating a Draw object
draw = ImageDraw.Draw(img)
  
# Drawing the text on the image
draw.text(xy=(25, 160),
          text="Hello, Geeks!",
          font=fnt,
          fill=(0, 127, 0))
  
img.show()

输出:

Python Pillow - ImageDraw模块

文本方法的输出图像

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Python pil