Python Pillow - ImageDraw 模块

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

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

  • 一个图像可以被认为是一个二维的像素阵列(图像元素)。 像素是所支持的最小颜色点。

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

  • 我们使用的枕头配色方案是 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) 返回图像参数 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 和画布的左上角到右下角绘制一条线。 该行使用颜色填充进行填充。 None 和 0 的默认值分别用于参数 fill 和 width,它们是可选的。

示例

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

输出

Line

椭圆

以下是使用 python pillow 绘制椭圆的语法 −

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

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

示例

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

输出

Ellipse

矩形

以下是使用 python pillow 绘制矩形的语法 −

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

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

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() 方法在draw 的坐标序列位置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()

输出

多边形