Python Pillow ImageDraw模块
图片绘图模块 ‘ImageDraw’ 提供了对Image对象的简单2D图形支持。通常,我们使用该模块创建新的图像,为现有图像添加注释或修饰,并生成用于网络的动态图形。
图形命令支持绘制形状和文本注释。
- 可以将图像视为二维像素(图元)数组。像素是最小支持的色彩点。
-
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)返回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() 方法在draw时绘制由包围框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)
rectangle()方法会在画布上绘制给定边界框xy的矩形。该形状会用填充颜色fill进行填充,边框会用颜色outline进行描边。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显示。参数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()