ImageDraw 模块

这个 ImageDraw 模块提供简单的二维图形 Image 物体。您可以使用此模块创建新图像、对现有图像进行注释或润色,以及动态生成图形以供Web使用。

有关PIL的更高级绘图库,请参见 aggdraw module .

示例:在图像上绘制灰色十字

from PIL import Image, ImageDraw

im = Image.open("hopper.jpg")

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

# write to stdout
im.save(sys.stdout, "PNG")

概念

协调

图形界面使用与PIL本身相同的坐标系,左上角有(0,0)。在图像边界之外绘制的任何像素都将被丢弃。

颜色

要指定颜色,可以使用数字或元组,就像使用 PIL.Image.new()PIL.Image.Image.putpixel() . 对于“1”、“l”和“i”图像,使用整数。对于“rgb”图像,使用包含整数值的3元组。对于“f”图像,使用整数或浮点值。

对于调色板图像(模式“p”),使用整数作为颜色索引。在1.1.4及更高版本中,还可以使用RGB 3元组或颜色名称(见下文)。绘图层将自动分配颜色索引,只要不使用超过256种颜色绘制。

颜色名称

颜色名称 Pillow 支持的颜色名称。

字体

PIL可以使用位图字体或OpenType/TrueType字体。

位图字体以PIL自己的格式存储,其中每个字体通常由两个文件组成,一个文件名为.pil,另一个文件名为.pbm。前者包含字体度量,后者包含栅格数据。

要加载位图字体,请使用 ImageFont 模块。

要加载OpenType/TrueType字体,请使用 ImageFont 模块。请注意,此功能依赖于第三方库,可能在所有PIL构建中都不可用。

示例:绘制部分不透明度文本

from PIL import Image, ImageDraw, ImageFont
# get an image
base = Image.open('Pillow/Tests/images/hopper.png').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('Pillow/Tests/fonts/FreeMono.ttf', 40)
# get a drawing context
d = ImageDraw.Draw(txt)

# draw text, half opacity
d.text((10,10), "Hello", font=fnt, fill=(255,255,255,128))
# draw text, full opacity
d.text((10,60), "World", font=fnt, fill=(255,255,255,255))

out = Image.alpha_composite(base, txt)

out.show()

功能

class PIL.ImageDraw.Draw(im, mode=None)

创建可用于绘制给定图像的对象。

请注意,图像将在适当的位置进行修改。

参数
  • im -- 要绘制的图像。

  • mode -- 用于颜色值的可选模式。对于RGB图像,此参数可以是RGB或RGBA(将图形混合到图像中)。对于所有其他模式,此参数必须与图像模式相同。如果忽略,则模式默认为图像的模式。

方法

PIL.ImageDraw.ImageDraw.getfont()

获取当前默认字体。

返回

图像字体。

PIL.ImageDraw.ImageDraw.arc(xy, start, end, fill=None, width=0)

在给定的边界框内,在起始角和结束角之间绘制圆弧(圆轮廓的一部分)。

参数
  • xy -- 定义边界框的两点。序列 [(x0, y0), (x1, y1)][x0, y0, x1, y1] 在哪里 x1 >= x0y1 >= y0 .

  • start -- 起始角度,以度为单位。角度从3点钟开始测量,顺时针增加。

  • end -- 结束角度,以度为单位。

  • fill -- 用于弧的颜色。

  • width -- 线条宽度,以像素为单位。…添加的版本:5.3.0

PIL.ImageDraw.ImageDraw.bitmap(xy, bitmap, fill=None)

使用非零部分的当前填充颜色在给定位置绘制位图(遮罩)。位图应该是有效的透明蒙版(模式“1”)或蒙版(模式“l”或“rgba”)。

这相当于 image.paste(xy, color, bitmap) .

要将像素数据粘贴到图像中,请使用 paste() 方法。

PIL.ImageDraw.ImageDraw.chord(xy, start, end, fill=None, outline=None, width=1)

等同于 arc() ,但用直线连接端点。

参数
  • xy -- 定义边界框的两点。序列 [(x0, y0), (x1, y1)][x0, y0, x1, y1] 在哪里 x1 >= x0y1 >= y0 .

  • outline -- 用于轮廓的颜色。

  • fill -- 用于填充的颜色。

  • width -- 线条宽度,以像素为单位。…添加的版本:5.3.0

PIL.ImageDraw.ImageDraw.ellipse(xy, fill=None, outline=None, width=1)

在给定的边界框内绘制椭圆。

参数
  • xy -- 定义边界框的两点。任何一个的序列 [(x0, y0), (x1, y1)][x0, y0, x1, y1] 在哪里 x1 >= x0y1 >= y0 .

  • outline -- 用于轮廓的颜色。

  • fill -- 用于填充的颜色。

  • width -- 线条宽度,以像素为单位。…添加的版本:5.3.0

PIL.ImageDraw.ImageDraw.line(xy, fill=None, width=0, joint=None)

在中的坐标之间绘制一条线 xy 名单。

参数
  • xy -- 两个元组的序列 [(x, y), (x, y), ...] 或类似的数值 [x, y, x, y, ...] .

  • fill -- 用于线条的颜色。

  • width -- 线条宽度,以像素为单位。…添加的版本:1.1.5..注意:此选项在1.1.6版之前已被破坏。

  • joint -- 一系列线条之间的关节类型。它可以是“曲线”,对于圆形边缘,也可以是“无”。…添加的版本:5.3.0

PIL.ImageDraw.ImageDraw.pieslice(xy, start, end, fill=None, outline=None, width=1)

与圆弧相同,但也在端点和边界框中心之间绘制直线。

参数
  • xy -- 定义边界框的两点。序列 [(x0, y0), (x1, y1)][x0, y0, x1, y1] 在哪里 x1 >= x0y1 >= y0 .

  • start -- 起始角度,以度为单位。角度从3点钟开始测量,顺时针增加。

  • end -- 结束角度,以度为单位。

  • fill -- 用于填充的颜色。

  • outline -- 用于轮廓的颜色。

  • width -- 线条宽度,以像素为单位。…添加的版本:5.3.0

PIL.ImageDraw.ImageDraw.point(xy, fill=None)

在给定坐标处绘制点(单个像素)。

参数
  • xy -- 两个元组的序列 [(x, y), (x, y), ...] 或类似的数值 [x, y, x, y, ...] .

  • fill -- 用于点的颜色。

PIL.ImageDraw.ImageDraw.polygon(xy, fill=None, outline=None)

绘制多边形。

多边形轮廓由给定坐标之间的直线以及最后一个坐标和第一个坐标之间的直线组成。

参数
  • xy -- 两个元组的序列 [(x, y), (x, y), ...] 或类似的数值 [x, y, x, y, ...] .

  • outline -- 用于轮廓的颜色。

  • fill -- 用于填充的颜色。

PIL.ImageDraw.ImageDraw.rectangle(xy, fill=None, outline=None, width=1)

绘制矩形。

参数
  • xy -- 定义边界框的两点。任何一个的序列 [(x0, y0), (x1, y1)][x0, y0, x1, y1] . 第二个点正好在绘制的矩形之外。

  • outline -- 用于轮廓的颜色。

  • fill -- 用于填充的颜色。

  • width -- 线条宽度,以像素为单位。…添加的版本:5.3.0

PIL.ImageDraw.ImageDraw.shape(shape, fill=None, outline=None)

警告

这种方法是实验性的。

画一个形状。

PIL.ImageDraw.ImageDraw.text(xy, text, fill=None, font=None, anchor=None, spacing=4, align="left", direction=None, features=None, language=None, stroke_width=0, stroke_fill=None)

在给定位置绘制字符串。

参数
  • xy -- 文本的左上角。

  • text -- 要绘制的文本。如果它包含任何换行符,则将文本传递给多行文本()

  • fill -- 用于文本的颜色。

  • font -- 安 ImageFont 实例。

  • spacing -- 如果文本被传递到multiline_text(),则表示行与行之间的像素数。

  • align -- 如果文本被传递到多行_text(),“Left”、“Center”或“Right”。

  • direction -- 文本的方向。它可以是“rtl”(从右到左)、“ltr”(从左到右)或“ttb”(从上到下)。需要libraqm。…添加的版本:4.2.0

  • features -- 文本布局期间要使用的OpenType字体功能列表。这通常用于打开默认情况下未启用的可选字体功能,例如“dlig”或“ss01”,但也可用于关闭默认字体功能,例如“-liga”禁用连字,或“-kern”禁用紧排。要获取所有支持的功能,请参阅https://docs.microsoft.com/en-us/typography/openttype/spec/featurelist requires libraqm。…添加的版本:4.2.0

  • language -- 文本的语言。不同的语言可以使用不同的字形或连字。此参数告诉文本使用哪种语言的字体,并根据需要应用正确的替换(如果可用)。应该是一个 BCP 47 language code <https://www.w3.org/International/articles/language-tags/> 需要libraqm。我是说…版本已添加::6.0.0

  • stroke_width -- 文本笔划的宽度。。版本号:6.2.0

  • stroke_fill -- 用于文本笔划的颜色。如果没有给出,将默认为 fill 参数。。版本号:6.2.0

PIL.ImageDraw.ImageDraw.multiline_text(xy, text, fill=None, font=None, anchor=None, spacing=4, align="left", direction=None, features=None, language=None)

在给定位置绘制字符串。

参数
  • xy -- 文本的左上角。

  • text -- 要绘制的文本。

  • fill -- 用于文本的颜色。

  • font -- 安 ImageFont 实例。

  • spacing -- 行与行之间的像素数。

  • align -- “左”、“中”或“右”。

  • direction -- 文本的方向。它可以是“rtl”(从右到左)、“ltr”(从左到右)或“ttb”(从上到下)。需要libraqm。…添加的版本:4.2.0

  • features -- 文本布局期间要使用的OpenType字体功能列表。这通常用于打开默认情况下未启用的可选字体功能,例如“dlig”或“ss01”,但也可用于关闭默认字体功能,例如“-liga”禁用连字,或“-kern”禁用紧排。要获取所有支持的功能,请参阅https://docs.microsoft.com/en-us/typography/openttype/spec/featurelist requires libraqm。…添加的版本:4.2.0

  • language -- 文本的语言。不同的语言可以使用不同的字形或连字。此参数告诉文本使用哪种语言的字体,并根据需要应用正确的替换(如果可用)。应该是一个 BCP 47 language code <https://www.w3.org/International/articles/language-tags/> 需要libraqm。我是说…版本已添加::6.0.0

PIL.ImageDraw.ImageDraw.textsize(text, font=None, spacing=4, direction=None, features=None, language=None, stroke_width=0)

返回给定字符串的大小(像素)。

参数
  • text -- 要测量的文本。如果它包含任何换行符,则文本将传递给多行utextsize()。

  • font -- 安 ImageFont 实例。

  • spacing -- 如果将文本传递给多行_textsize(),则表示行与行之间的像素数。

  • direction -- 文本的方向。它可以是“rtl”(从右到左)、“ltr”(从左到右)或“ttb”(从上到下)。需要libraqm。…添加的版本:4.2.0

  • features -- 文本布局期间要使用的OpenType字体功能列表。这通常用于打开默认情况下未启用的可选字体功能,例如“dlig”或“ss01”,但也可用于关闭默认字体功能,例如“-liga”禁用连字,或“-kern”禁用紧排。要获取所有支持的功能,请参阅https://docs.microsoft.com/en-us/typography/openttype/spec/featurelist requires libraqm。…添加的版本:4.2.0

  • language -- 文本的语言。不同的语言可以使用不同的字形或连字。此参数告诉文本使用哪种语言的字体,并根据需要应用正确的替换(如果可用)。应该是一个 BCP 47 language code <https://www.w3.org/International/articles/language-tags/> 需要libraqm。我是说…版本已添加::6.0.0

  • stroke_width -- 文本笔划的宽度。。版本号:6.2.0

PIL.ImageDraw.ImageDraw.multiline_textsize(text, font=None, spacing=4, direction=None, features=None, language=None, stroke_width=0)

返回给定字符串的大小(像素)。

参数
  • text -- 要测量的文本。

  • font -- 安 ImageFont 实例。

  • spacing -- 行与行之间的像素数。

  • direction -- 文本的方向。它可以是“rtl”(从右到左)、“ltr”(从左到右)或“ttb”(从上到下)。需要libraqm。…添加的版本:4.2.0

  • features -- 文本布局期间要使用的OpenType字体功能列表。这通常用于打开默认情况下未启用的可选字体功能,例如“dlig”或“ss01”,但也可用于关闭默认字体功能,例如“-liga”禁用连字,或“-kern”禁用紧排。要获取所有支持的功能,请参阅https://docs.microsoft.com/en-us/typography/openttype/spec/featurelist requires libraqm。…添加的版本:4.2.0

  • language -- 文本的语言。不同的语言可以使用不同的字形或连字。此参数告诉文本使用哪种语言的字体,并根据需要应用正确的替换(如果可用)。应该是一个 BCP 47 language code <https://www.w3.org/International/articles/language-tags/> 需要libraqm。我是说…版本已添加::6.0.0

  • stroke_width -- 文本笔划的宽度。。版本号:6.2.0

PIL.ImageDraw.getdraw(im=None, hints=None)

警告

这种方法是实验性的。

基于WCK接口的PIL图像更高级的二维绘图接口。

参数
  • im -- 要绘制的图像。

  • hints -- 提示的可选列表。

返回

(绘图上下文、绘图资源工厂)元组。

PIL.ImageDraw.floodfill(image, xy, value, border=None, thresh=0)

警告

这种方法是实验性的。

用给定颜色填充有界区域。

参数
  • image -- 目标图像。

  • xy -- 种子位置(2项坐标元组)。

  • value -- 填充颜色。

  • border -- 可选边框值。如果给定,该区域由颜色与边框颜色不同的像素组成。如果没有给出,该区域由与种子像素颜色相同的像素组成。

  • thresh -- 可选阈值,指定像素值与“背景”的最大允许差异,以便替换。用于填充颜色不均匀但相似的区域。