ImageDraw 模块为Image类提供了简单的2D图形。可以使用这个模块创建新图像,做注释或者对现有图像进行润饰,使用该模块还可以即时创建图像方便用于web。
PIL的更多高级绘图库,可参见 The aggdraw Module。
例子
在图像上绘制一个灰色的十字
import Image, ImageDraw
im = Image.open("lena.pgm")
draw = ImageDraw.Draw(im)
draw.line((0, 0) + im.size, fill=128)
draw.line((0, im.size[1], im.size[0], 0), fill=128)
del draw
# write to stdout
im.save(sys.stdout, "PNG")
概念
坐标
图形接口与PIL使用相同的坐标系统,(0,0)表示左上角。
颜色
要指定颜色,可以使用数值或者元组,就像你在 Image.new 或 Image.putpixel中使用的那样。对于 "1", "L", 和 "I" 图像,使用整数。“RGB”图像,使用包含整数的3元元组。对于“F”图像,使用整数或者浮点数。
对于调色板图像(模式 "P"),使用整数作为颜色索引。1.1.4及后继版本中,还可以使用RGB 3元组或者颜色名(见下面)。只要使用的颜色不超过256种,绘图层会自动分配颜色索引。
颜色名
PIL 1.1.4 及后继版本中,可以在向RGB图像中绘图的时候使用字符串常量。PIL支持下面的字符串格式:
· 十六进制颜色标识符,"#rgb" 或 "#rrggbb"形式给出。比如,"#ff0000"表示纯红色。
· RGB 函数, "rgb(red, green, blue)"形式给出,其中颜色值是0-255之间的整数。另外,颜色值还可以以百分比的形式给出(0% 到100%)。比如,"rgb(255,0,0)" 和 "rgb(100%,0%,0%)" 两个都指定了纯红色。
· Hue-Saturation-Lightness (HSL) 函数,"hsl(hue, saturation%, lightness%)" 形式给出,其中hue 取0-360之间的值,表示颜色(red=0, green=120, blue=240),saturation 是一个介于 0% 到 100% (gray=0%, full color=100%)的值,lightness 是一个介于 0% 到 100% (black=0%, normal=50%, white=100%)之间的值。比如,"hsl(0,100%,50%)" 是纯红色。
· 普通的 HTML 颜色名。ImageDraw 基于X Window系统和大部分网页浏览器支持的颜色提供了大约140 种标准颜色名。颜色名是大小写不敏感的,可以包含空格。比如, "red" 和 "Red" 都表示纯红色。
字体
PIL 可以使用位图字体和 OpenType/TrueType 字体。
位图字体保存在PIL自己的格式中,其中每个字体由两个文件组成,一个名为 .pil 另一个通常名为 .pbm。前者包含了字体矩阵,后者包含了光栅数据。
可以使用ImageFont模块提供的load函数加载位图字体。
要加载 OpenType/TrueType 字体,可以使用ImageFont模块提供的 truetype 函数。注意这个函数依赖第三方库,可能在有些PIL中不可用。
(IronPIL) 加载内建字体,可以使用ImageFont模块提供的Font构造器.
函数
Draw
Draw(image) => Draw instance
创建一个用来在所给图像上绘图的对象。
(IronPIL) 除了图像,你还可以使用ImageWin模块提供 HWND 或者 HDC 对象。这允许你直接在屏幕上绘制。
注意,修改直接应用到图像上。
方法
arc
draw.arc(xy, start, end, options)
会之后角start和end之间的弧(圆的一部分)到所给的区域。
outline (译注:似乎应该是fill)选项指出绘制弧使用的颜色。
bitmap
draw.bitmap(xy, bitmap, options)
使用当前的填充颜色,在给定位置绘制一个位图(遮罩层)。使用当前的填充色在指定位置绘制一个位图(遮罩层)。这个位图应该是一个有效的透明遮罩(模式“1”),或者matte (模式 "L" 或 "RGBA")。
使用图像的paste方法可以把像素数据粘贴到图像上。
chord
draw.chord(xy, start, end, options)
与arc相同,但是会用直线连接起始点。
outline 给出了弦(事实上是一个弓形)的轮廓的颜色。fill选项给出了弓形内部的填充色。
ellipse
draw.ellipse(xy, options)
在所个区域绘制一个椭圆。
outline 选项给出了椭圆轮廓线的颜色。fill 选项给出了椭圆的填充色。
line
draw.line(xy, options)
在xy列表提供的坐标间绘制一条线。
坐标列表包含的可以是2元元组,也可以是数值。但至少应该包含两组坐标。
fill 选项给出了线条的颜色。
(1.1.5新加)width 指定了线条的宽度,单位是像素。注意PIL对线段之间的链接处理的不是很好,所以较粗的多线看起来不是很好。
注意: width 在1.1.5中不能正常工作。绘制的线条宽度是你指定的两倍。这个错误将在1.1.6中修复。
pieslice
draw.pieslice(xy, start, end, options)
与arc相同,但是会在终点和区域的中心绘制直线(事实上绘制的是扇形)。
outline 选项指定了pieslice 轮廓线的颜色。fill选项指定了 pieslice 的填充色。
point
draw.point(xy, options)
在给定坐标画点(单个的点。
坐标列表可以是包含2元元组[ (x, y), ... ]或者是数值[ x, y, ... ]的序列对象。
fill 指定了点的颜色。
polygon
draw.polygon(xy, options)
绘制多边形。
多边形由相邻给出坐标之间的直线和起始点之间的直线构成。
坐标列表可以是包含2元元组[ (x, y), ... ]或者是数值[ x, y, ... ]的序列对象。
outline 选项指定了多边形轮廓线的颜色。fill选项指定了多边形的填充色。
rectangle
draw.rectangle(box, options)
绘制矩形。
box可以是任何包含2元元组 [ (x, y), (x, y) ]或是数值[ x, y, x, y ]的序列。它至少应该有两组坐标。
注意第二组坐标对指定的点刚好在矩形外边,不填充的时候也是这样。
outline 指定了矩形轮廓线的颜色。fill 选项指定了矩形的填充色。
text
draw.text(position, string, options)
在给定位置绘制字符串。Position给出了文本左上角的位置。
Font选项指定使用的字体。它应该是ImageFont类的实例,通常是由ImageFont模块提供的load方法从文件中加载的。.
fill 选项指定了文本使用的颜色。
textsize
draw.textsize(string, options) => (width, height)
返回给出文本的大小,单位是像素。
font 选项用来指定使用的字体。它应该是ImageFont类的实例,通常是由ImageFont模块提供的load方法从文件中加载的。
选项
outline
outline 整数或元组
fill
fill整数或元组
font
font ImageFont 的实例
Compatibility
Draw 类包含了一个构造器和许多方法只是为了保证它的向后兼容性。要使它正常工作,你应该要么应用这些选项到绘制图元上,要么使用这些方法。不要混合新旧约定。
(IronPIL) IronPIL不支持兼容方法。
ImageDraw
ImageDraw(image) => Draw instance
(不赞成)与Draw相同。不要在新代码中使用。
setink
draw.setink(ink)
(不赞成)设置绘制和填充颜色。
setfill
draw.setfill(mode)
(不赞成)设置填充模式。
如果模式是0,接下来只绘制形状的轮廓(比如多边形和矩形)。如果模式设置为1,形状会被填充。
setfont
draw.setfont(font)
(不赞成)设置text方法的默认字体。
Font参数应该是ImageFont类的实例,通常由ImageFont模块提供的load方法从文件中加载。
PIL的更多高级绘图库,可参见 The aggdraw Module。
例子
在图像上绘制一个灰色的十字
import Image, ImageDraw
im = Image.open("lena.pgm")
draw = ImageDraw.Draw(im)
draw.line((0, 0) + im.size, fill=128)
draw.line((0, im.size[1], im.size[0], 0), fill=128)
del draw
# write to stdout
im.save(sys.stdout, "PNG")
概念
坐标
图形接口与PIL使用相同的坐标系统,(0,0)表示左上角。
颜色
要指定颜色,可以使用数值或者元组,就像你在 Image.new 或 Image.putpixel中使用的那样。对于 "1", "L", 和 "I" 图像,使用整数。“RGB”图像,使用包含整数的3元元组。对于“F”图像,使用整数或者浮点数。
对于调色板图像(模式 "P"),使用整数作为颜色索引。1.1.4及后继版本中,还可以使用RGB 3元组或者颜色名(见下面)。只要使用的颜色不超过256种,绘图层会自动分配颜色索引。
颜色名
PIL 1.1.4 及后继版本中,可以在向RGB图像中绘图的时候使用字符串常量。PIL支持下面的字符串格式:
· 十六进制颜色标识符,"#rgb" 或 "#rrggbb"形式给出。比如,"#ff0000"表示纯红色。
· RGB 函数, "rgb(red, green, blue)"形式给出,其中颜色值是0-255之间的整数。另外,颜色值还可以以百分比的形式给出(0% 到100%)。比如,"rgb(255,0,0)" 和 "rgb(100%,0%,0%)" 两个都指定了纯红色。
· Hue-Saturation-Lightness (HSL) 函数,"hsl(hue, saturation%, lightness%)" 形式给出,其中hue 取0-360之间的值,表示颜色(red=0, green=120, blue=240),saturation 是一个介于 0% 到 100% (gray=0%, full color=100%)的值,lightness 是一个介于 0% 到 100% (black=0%, normal=50%, white=100%)之间的值。比如,"hsl(0,100%,50%)" 是纯红色。
· 普通的 HTML 颜色名。ImageDraw 基于X Window系统和大部分网页浏览器支持的颜色提供了大约140 种标准颜色名。颜色名是大小写不敏感的,可以包含空格。比如, "red" 和 "Red" 都表示纯红色。
字体
PIL 可以使用位图字体和 OpenType/TrueType 字体。
位图字体保存在PIL自己的格式中,其中每个字体由两个文件组成,一个名为 .pil 另一个通常名为 .pbm。前者包含了字体矩阵,后者包含了光栅数据。
可以使用ImageFont模块提供的load函数加载位图字体。
要加载 OpenType/TrueType 字体,可以使用ImageFont模块提供的 truetype 函数。注意这个函数依赖第三方库,可能在有些PIL中不可用。
(IronPIL) 加载内建字体,可以使用ImageFont模块提供的Font构造器.
函数
Draw
Draw(image) => Draw instance
创建一个用来在所给图像上绘图的对象。
(IronPIL) 除了图像,你还可以使用ImageWin模块提供 HWND 或者 HDC 对象。这允许你直接在屏幕上绘制。
注意,修改直接应用到图像上。
方法
arc
draw.arc(xy, start, end, options)
会之后角start和end之间的弧(圆的一部分)到所给的区域。
outline (译注:似乎应该是fill)选项指出绘制弧使用的颜色。
bitmap
draw.bitmap(xy, bitmap, options)
使用当前的填充颜色,在给定位置绘制一个位图(遮罩层)。使用当前的填充色在指定位置绘制一个位图(遮罩层)。这个位图应该是一个有效的透明遮罩(模式“1”),或者matte (模式 "L" 或 "RGBA")。
使用图像的paste方法可以把像素数据粘贴到图像上。
chord
draw.chord(xy, start, end, options)
与arc相同,但是会用直线连接起始点。
outline 给出了弦(事实上是一个弓形)的轮廓的颜色。fill选项给出了弓形内部的填充色。
ellipse
draw.ellipse(xy, options)
在所个区域绘制一个椭圆。
outline 选项给出了椭圆轮廓线的颜色。fill 选项给出了椭圆的填充色。
line
draw.line(xy, options)
在xy列表提供的坐标间绘制一条线。
坐标列表包含的可以是2元元组,也可以是数值。但至少应该包含两组坐标。
fill 选项给出了线条的颜色。
(1.1.5新加)width 指定了线条的宽度,单位是像素。注意PIL对线段之间的链接处理的不是很好,所以较粗的多线看起来不是很好。
注意: width 在1.1.5中不能正常工作。绘制的线条宽度是你指定的两倍。这个错误将在1.1.6中修复。
pieslice
draw.pieslice(xy, start, end, options)
与arc相同,但是会在终点和区域的中心绘制直线(事实上绘制的是扇形)。
outline 选项指定了pieslice 轮廓线的颜色。fill选项指定了 pieslice 的填充色。
point
draw.point(xy, options)
在给定坐标画点(单个的点。
坐标列表可以是包含2元元组[ (x, y), ... ]或者是数值[ x, y, ... ]的序列对象。
fill 指定了点的颜色。
polygon
draw.polygon(xy, options)
绘制多边形。
多边形由相邻给出坐标之间的直线和起始点之间的直线构成。
坐标列表可以是包含2元元组[ (x, y), ... ]或者是数值[ x, y, ... ]的序列对象。
outline 选项指定了多边形轮廓线的颜色。fill选项指定了多边形的填充色。
rectangle
draw.rectangle(box, options)
绘制矩形。
box可以是任何包含2元元组 [ (x, y), (x, y) ]或是数值[ x, y, x, y ]的序列。它至少应该有两组坐标。
注意第二组坐标对指定的点刚好在矩形外边,不填充的时候也是这样。
outline 指定了矩形轮廓线的颜色。fill 选项指定了矩形的填充色。
text
draw.text(position, string, options)
在给定位置绘制字符串。Position给出了文本左上角的位置。
Font选项指定使用的字体。它应该是ImageFont类的实例,通常是由ImageFont模块提供的load方法从文件中加载的。.
fill 选项指定了文本使用的颜色。
textsize
draw.textsize(string, options) => (width, height)
返回给出文本的大小,单位是像素。
font 选项用来指定使用的字体。它应该是ImageFont类的实例,通常是由ImageFont模块提供的load方法从文件中加载的。
选项
outline
outline 整数或元组
fill
fill整数或元组
font
font ImageFont 的实例
Compatibility
Draw 类包含了一个构造器和许多方法只是为了保证它的向后兼容性。要使它正常工作,你应该要么应用这些选项到绘制图元上,要么使用这些方法。不要混合新旧约定。
(IronPIL) IronPIL不支持兼容方法。
ImageDraw
ImageDraw(image) => Draw instance
(不赞成)与Draw相同。不要在新代码中使用。
setink
draw.setink(ink)
(不赞成)设置绘制和填充颜色。
setfill
draw.setfill(mode)
(不赞成)设置填充模式。
如果模式是0,接下来只绘制形状的轮廓(比如多边形和矩形)。如果模式设置为1,形状会被填充。
setfont
draw.setfont(font)
(不赞成)设置text方法的默认字体。
Font参数应该是ImageFont类的实例,通常由ImageFont模块提供的load方法从文件中加载。