鱼C论坛

 找回密码
 立即注册
查看: 1441|回复: 0

[技术交流] ImageDraw模块

[复制链接]
发表于 2018-4-29 15:20:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 MSK 于 2018-4-29 15:22 编辑

使用Image模块可以对一个Image对象进行画图操作

模块导入
  1. from PIL import ImageDraw
复制代码


首先,假设我们有一个Image对象im, 要在im上画图, 需要先创建一个Draw对象的实例,通过Draw对象的实例里的方法来对im进行画图
创建Draw实例
draw = ImageDraw.Draw(im) #im为Image对象

方法:
1.画一个矩形
函数原型
  1. draw.rectangle(box, options)
复制代码

box可以是一个包含两个表示坐标的序列,比如[(x1, y1), (x2, y2)], ((x1, y1), (x2, y2))
或者把四个表示位置的整数放在一起: [x1, y1, x2, y2]
options请参照本帖末

实例
  1. from PIL import Image,ImageDraw
  2. im = Image.open("img.jpg")
  3. draw = ImageDraw.Draw(im)
  4. im.rectangle([(100, 100), (200, 200)], outline="red", fill="blue")
  5. #im.show()
复制代码

颜色的表示请参照本帖末




2.绘制文字
原型
  1. draw.text(position, string, options)
复制代码

position: 绘制的位置(left-top)
string: 绘制的文本
实例:
  1. draw.text((100, 200),"I love Python", fill="red")
  2. #draw.text([100, 200],"I love Python", fill="red")
  3. #draw.text([(100, 200)],"I love Python", fill="red")
复制代码


另外, 绘制前可使用textsize获取文本大小
  1. draw.textsize(string, options) #⇒ (width, height)
复制代码





3.画线
原型
  1. draw.line(xy, options)
复制代码

xy: 起点和终点坐标,表示方法同rectangle的第一个参数






4.画弧
原型
  1. draw.arc(xy, start, end, options)
复制代码

xy: 在矩形区域(xy)内画一个圆弧, xy表示方法同rectangle的第一个参数,如果区域不是正方形,则在该区域内的最大椭圆中根据角度截取片段
start: 开始角度
end: 结束角度
start与end方向与数学里的坐标系相反(数学里角度逆时针增大, 而这里是顺时针)
实例
  1. draw.arc((100,100,200,200),0,90,fill = "red") #画四分之一个圆弧
复制代码





5.画圆
原型
  1. draw.ellipse(xy, options)
复制代码

实例
  1. draw.ellipse((100,100,200,200),outline = 128)  #画一个圆, 线条颜色为红色
  2. draw.ellipse((100,100,300,200),fill = "blue")  #画个椭圆, 用蓝色填充
复制代码





6.画弦
原型
  1. draw.chord(xy, start, end, options)
复制代码

各参数用法同画弧
实例
  1. draw.ellipse((100,100,200,200),outline = 128)  #画一个圆, 线条颜色为红色
  2. draw.chord((100,100,300,200), 0, 90, fill = "blue")  #画一条弦, 蓝色
复制代码





7.画扇形
原型
  1. draw.pieslice(xy, start, end, options)
复制代码

各参数用法同画弧
  1. draw.ellipse((100,100,200,200),outline = 128)  #画一个圆, 线条颜色为红色
  2. draw.pieslice((100,100,300,200), 0, 30, fill = "blue")  #画个扇形, 用蓝色填充
复制代码





                               
登录/注册后可看大图





颜色的表示

1.十六进制表示法
比如“#ff0000” ,或者简写为"#f00"

2.rgb表示法
格式
“rgb(red, green, blue)”
比如rgb(255,0,0)表示红色,其中相应的数字也可以换为百分数所以"rgb(100%, 0%, 0%)"和rgb(255,0,0)是等价的

3.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%)”表示纯红色



4.颜色名

PIL支持基本的HTML颜色名,如red, blue, aqua等等






                               
登录/注册后可看大图








Options参数
1.outline 线条颜色

2.fill 填充颜色

3.font 字体(一个ImageFont实例, 详情请参考ImageFont模块)




想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 19:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表