19-绘制形状
19.4.1 绘制形状
下面的 ImageDraw 模块的方法可在图像上绘制各种形状。这些方法的 fill 和 outline 参数是可选的,如果未指定,默认均为白色。
点
point(xy, fill) 方法绘制单个像素。 xy 参数表示要画的点的列表。该列表可以是x和y坐标的元组的列表,例如 [(x, y), (x, y), ...] ;或是没有元组的x和y坐标的列表,例如 [x1, y1, x2, y2, ...] 。 fill 参数是点的颜色,要么是一个RGBA元组,要么是颜色名称的字符串,如 'red' 。 fill 参数是可选的。
线
line(xy, fill, width) 方法绘制一条线或一系列的线。 xy 要么是一个元组的列表,例如 [(x, y), (x, y), ...] ,要么是一个整数列表,例如 [x1, y1, x2, y2, ...] 。每个点都是正在绘制的线上的一个连接点。可选的 fill 参数是线的颜色,是一个RGBA元组或颜色名称。可选的 width 参数是线的宽度,如果未指定,默认值为1。
矩形
rectangle(xy, fill, outline) 方法绘制一个矩形。 xy 参数是一个矩形元组,形式为 (left, top, right, bottom) 。 left 和 top 值指定了矩形左上角的x和y坐标, right 和 bottom 指定了矩形的右下角的x和y坐标。可选的 fill 参数是颜色,将填充该矩形的内部。可选的 outline 参数是矩形轮廓的颜色。
椭圆
ellipse(xy, fill, outline) 方法绘制一个椭圆。如果椭圆的长轴和短轴一样,该方法将绘制一个圆。 xy 参数是一个矩形元组 (left, top, right, bottom) ,它表示正好包含该椭圆的矩形。可选的 fill 参数是椭圆内的颜色,可选的 outline 参数是椭圆轮廓的颜色。
多边形
polygon(xy, fill, outline) 方法绘制任意的多边形。 xy 参数是一个元组列表,例如 [(x, y), (x, y), ...] ;或者是一个整数列表,例如 [x1, y1, x2, y2, ...] ,表示多边形边的连接点。最后一对坐标将自动连接到第一对坐标。可选的 fill 参数是多边形内部的颜色,可选的 outline 参数是多边形轮廓的颜色。
绘制示例
在交互式环境中输入以下代码:
>>> from PIL import Image, ImageDraw
>>> im = Image.new('RGBA', (200, 200), 'white')
>>> draw = ImageDraw.Draw(im)
❶ >>> draw.line([(0, 0), (199, 0), (199, 199), (0, 199), (0, 0)], fill='black')
❷ >>> draw.rectangle((20, 30, 60, 60), fill='blue')
❸ >>> draw.ellipse((120, 30, 160, 60), fill='red')
❹ >>> draw.polygon(((57, 87), (79, 62), (94, 85), (120, 90), (103, 113)),
fill='brown')
❺ >>> for i in range(100, 200, 10):
draw.line([(i, 0), (200, i - 100)], fill='green')
>>> im.save('drawing.png')
为200像素×200像素的白色图像生成 Image 对象后,将它传入 ImageDraw. Draw() ,获得 ImageDraw 对象。将 ImageDraw对象 保存在 draw 中,可以对 draw 调用绘图方法。这里,我们在图像边缘画上窄的黑色轮廓❶;画一个蓝色的矩形,左上角在(20, 30),右下角在(60, 60)❷;画一个红色的椭圆,由(120, 30)到(160, 60)的矩形来定义❸;画一个棕色的多边形,有5个顶点❹,以及一些绿线的图案,用 for 循环绘制❺。得到的drawing.png文件如图19-14所示。

ImageDraw 对象还有另外几个绘制形状的方法,读者可自行查询完整的技术文档。