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()
输出
椭圆
以下是使用 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()
输出
矩形
以下是使用 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()