ImageDraw 模块

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方法从文件中加载。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值