Python Pillow - ImageDraw 模块


“ImageDraw”模块为图像对象提供简单的 2D 图形支持。通常,我们使用此模块来创建新图像、注释或修饰现有图像以及动态生成图形以供 Web 使用。

图形命令支持形状绘制和文本注释。

  • 图像可以被认为是像素(图片元素)的二维数组。像素是支持的最小颜色点。

  • ImageDraw 使用的二维坐标系的原点位于图像的左上角。

  • 我们使用的Pillow配色方案是 RGB。颜色 RGB 表示和支持由模块ImageColor提供。

  • 位图、OpenType 或 TrueType 是文本注释可接受的字体。

  • 大多数绘图命令可能需要一个边界框参数,该参数指定图像上要应用该命令的区域。

  • 坐标序列可以表示为 [ (x0, y0), (x1, y1),…(xn, yn)]。

  • 对于某些绘图命令,我们需要角度值。

例子

以下 python 示例在给定图像上画一条线 -

#Import required libraries
import sys
from PIL import Image, ImageDraw

#Create Image object
im = Image.open("images/logo.jpg")

#Draw line
draw = ImageDraw.Draw(im)
draw.line((0, 0) + im.size, fill=128)
draw.line((0, im.size[1], im.size[0], 0), fill=128)

#Show image
im.show()

输出

如果将上述程序保存为Example.py并执行,它会在图像上画一条线并使用标准PNG显示实用程序显示它,如下所示 -

公用事业

帆布

  • ImageDraw 是图像的 Pillow 可绘制表面(即画布)。

  • ImageDraw.Draw(img) 返回 Image 参数 img 的可绘制画布表示。画布的背景是“img”图像。

例子

以下 python 示例在给定图像上绘制文本 -

#Import required modules from Pillow package
from PIL import Image, ImageDraw, ImageFont

# get an image
base = Image.open('images/boy.jpg').convert('RGBA')

# make a blank image for the text, initialized to transparent text color
txt = Image.new('RGBA', base.size, (255,255,255,0))

# get a font
fnt = ImageFont.truetype('E:/PythonPillow/Fonts/Pacifico.ttf', 40)

# get a drawing context
d = ImageDraw.Draw(txt)

# draw text, half opacity
d.text((14,14), "Tutorials", font=fnt, fill=(255,255,255,128))

# draw text, full opacity
d.text((14,60), "Point", font=fnt, fill=(255,255,255,255))
out = Image.alpha_composite(base, txt)

#Show image
out.show()

输出

帆布

使用“ImageDraw”模块绘制形状

ImageDraw 模块允许我们首先使用要使用的图像创建绘图对象,然后应用它来创建不同的形状。我们可以使用“ImageDraw”模块绘制的一些常见形状如下 -

线

以下是使用 python Pillow 画线的语法 -

draw.line(xy, fill=None, width=0)

line ()方法从边界框 xy 和画布的左上角到右下角绘制一条线。使用颜色填充来填充线条。参数 fill 和 width 的默认值分别为 None 和 0,这两个参数是可选的。

例子

from PIL import Image, ImageDraw

img = Image.new('RGB', (500, 300), (125, 125, 125))
draw = ImageDraw.Draw(img)
draw.line((200, 100, 300, 200), fill=(0, 0, 0), width=10)

img.show()

输出

线

以下是使用 python Pillow 绘制椭圆的语法 -

draw.ellipse(xy, fill=None, outline=None)

ellipse ()方法在绘制时绘制由边界框 xy 包围的椭圆。使用颜色填充和颜色轮廓的周边来填充形状。参数 fill 和 width 的默认值 None 是可选的。

例子

from PIL import Image, ImageDraw

img = Image.new('RGB', (500, 300), (125, 125, 125))
draw = ImageDraw.Draw(img)

draw.ellipse((200, 125, 300, 200), fill=(255, 0, 0), outline=(0, 0, 0))
img.show()

输出

椭圆

长方形

以下是使用 python Pillow 绘制矩形的语法 -

draw.rectangle(xy, fill=None, outline=None)

矩形()方法在绘制时绘制给定边界框xy的矩形。使用颜色填充和颜色轮廓的周边来填充形状。参数 fill 和 width 的默认值 None 是可选的。

from PIL import Image, ImageDraw

img = Image.new('RGB', (500, 300), (125, 125, 125))
draw = ImageDraw.Draw(img)

draw.rectangle(
   (200, 125, 300, 200),
   fill=(255, 0, 0),
   outline=(0, 0, 0))
img.show()

输出

长方形

多边形

以下是使用 python Pillow 绘制矩形的语法 -

draw.polygon(seq, fill=None, outline=None)

Polygon ()方法绘制一个多边形,用直线连接绘图上的坐标序列位置 seq。seq 中的第一个和最后一个坐标也通过直线连接。使用颜色填充和颜色轮廓的周边来填充形状。参数 fill 和 Outline 是可选的,默认值为 None。

from PIL import Image, ImageDraw

img = Image.new('RGB', (500, 300), (125, 125, 125))
draw = ImageDraw.Draw(img)

draw.polygon(
   ((200, 200), (300, 100), (250, 50)),
   fill=(255, 0, 0),
   outline=(0, 0, 0))
img.show()

输出

多边形