ImageDraw

新建一个空白图片为本文作示例,新建空白文件的方法 见Image模块,Image.new:

import Image
blank = Image.new("RGB",[1024,768],"white")      

1、模块引入

import ImageDraw

2、ImageDraw.Draw(image)

创建一个可用来对image进行操作的对象。对所有即将使用ImageDraw中操作的图片都要先进行这个对象的创建。

drawObject = ImageDraw.Draw(blank)

3、drawObject.line([x1,y1,x2,y2] ,options)
       以(x1,y1)为起始点,以(x2,y2)为终止点划一条直线。
       [x1,y1,x2,y2]也可以写为:(x1,y1,x2,y2),[(x1,y1),(x2,y2)]等,options选项包含的fill选项规定线条颜色,具体方法如下各例所示:

drawObeject.line([100,100,100,600],fill = 10)
drawObject.line([(100,100),600,100],fill = 128)
drawObject.line([(600,100),(600,600)],"black")
drawObject.line((100,600,600,600),fill = "yellow")

4、drawObject.arc([x1, y1, x2, y2],  startAngle,  endAngle,  options)

在左上角坐标为(x1,y1),右下角坐标为 (x2,y2)的矩形区域内满圆O内,以starangle为起始角度,endAngle为终止角度,截取圆O的一部分圆弧画出来

(如果[x1,y1,x2,y2]区域不是正方形,则在该区域内的最大椭圆中根据角度截取片段)

注意:

       [x1,y1,x2,y2]规定矩形框的水平中位线为0度角,角度顺时针变大(与数学坐标系规定方向相反!!)

options规定圆弧线的颜色。具体方法同drawObject.line

#画一个60度蓝色圆弧
drawObject.arc((100,100,600,600),0,90,fill = "blue")
#画一个上半圆弧
drawObject.arc((100,100,600,600),180,360,fill = "red")
#画一个右半椭圆,只需改区域大小为长方形
drawObject.arc((100,100,600,400),90,270,fill = "blue")

5、drawObject.ellipse([x1,y1,x2,y2],  options)

用法同arc,用于画圆(或者椭圆)

Options选项中fill表示将圆(或者椭圆)用指定颜色填满,outlie表示只规定圆的颜色

drawObject.ellipse((100,100,600,600),outline = 128)
drawOject.ellipse((100,250,600,450),fill = "blue")

6、drawObject.chord([x1, y1, x2, y2],  startAngle,  endAngle,  options)

用法与arc相同,用来画圆从startAngle到endAngle的弦。

Options选项中fill表示将弦与圆弧之间空间用指定颜色填满,outlie表示只规定弦线的颜色

画一个圆,并在园内画弦示例如下:

#画圆
drawObject.ellipse((100,100,600,600),outline = 128)
#画一条弦
drawObject.chord((100,100,600,600),0,90,outline = "red")
#画弦并且将弦与弧包围区域涂色
drawObject.chord((100,100,600,600),90,180,fill = "red")

7、drawObject.pieslice([x1,y1,x2,y2],  startAngle,  endAngle,  options)

用法与ellipse相同,用于画起始角度间的扇形区域

options选项中fill选项将扇形区域用指定颜色填满,outline选项只用指定颜色描出区域轮廓,示例如下:

#画一个圆
d.ellipse((100,100,600,600),outline = 128)
#在上一行画出的园内画180度到210度的扇形区域轮廓
d.pieslice((100,100,600,600),180,210,outline = 128)
#画60度到90度的扇形区域
d.pieslice((100,100,600,600),60,90,fill = "blue")

8、drawObject.polygon(([x1,y1,x2,y2,…],options)

根据坐标画多边形,python会根据第一个参量中的xy坐标对,连接出整个图形

options选项中fill选项将多边形区域用指定颜色填满,outline选项只用指定颜色描出区域轮廓,示例如下:

d.polygon([(200,200),(600,300),(300,600)],outline = "red")
d.polygon([(300,300),(500,300),(300,500),(500,500)],fill = "red")

9、drawObeject.rectangle([x1,y1,x2,y2],options)

在给定区域内画一个矩形,(x1,y1)表示矩形左上角坐标值,(x2,y2)表示矩形右下角坐标值

options选项中fill选项将多边形区域用指定颜色填满,outline选项只用指定颜色描出区域轮廓,示例如下:

#画矩形
drawObject.rectangle((200,200,500,500),outline = "red")
drawObject.rectangle((250,300,450,400),fill = 128)

10、drawObject.text(position,  string,  options)

在图像内添加文字

Position是一个二元元组,指定字符串左上角坐标,string是要写入的字符串

options选项可以为fill或者font(只能选择其中之一作为第三参量,不能两个同同时存在,要改变字体颜色,见ImageFont模块中的NOTE)。其中fill指定字的颜色,font指定字体与字的尺寸,font必须为ImageFont中指定的font类型,具体用法见ImageFont.Truetype()

第三参量为font示例参见下文ImageFont.Truetype(),第三那参量为fill时示例如下:

#在空白图像上矩形区域内添加文字
text = "I love python!"
d.rectangle((200,200,500,500),outline = "red")
d.text([300,350],text,"red")

11、drawObject.textsize(string,  options)

这个函数返回一个两元素的元组,是给定字符串像素意义上的size

ImageFont

1、模块引入

import ImageFont

2、 ImageFont.truetype(filename ,   wordsize)

这个函数创建字体对象给ImageDraw中的text函数使用。

Filename是字体文件的名称,通常为ttf文件,还有少数ttc文件,可以在C:\Windows\Fonts中找到。

“simsun.ttc是三种ttf文件的集合,是“宋体、新宋体、宋体-PUA”三种字体的集合,可以通过在truetype中增加index参量实现对集合内字体的调用

Eg.font = ImageFont.truetype("simsun.ttc",24,index=1) “

(我看到网上说是三种字体的集合,但是我试验的过程中发现似乎只有两种)

Wordsize参数指定字的大小。结合drawObject.text()示例如下:

text = "I love python!"
d.rectangle((100,100,600,600),fill = 128)
#字体对象1为simsunb,字大小为36号
Font1 = ImageFont.truetype("C:\Windows\Fonts\simsunb.ttf",36)
#字体对象2在ttc中第一个(我也不知道具体是什么字形),字大小为36号
Font2 = ImageFont.truetype("C:\Windows\Fonts\simsun.ttc",36,index = 0)
#字体对象2在ttc中第二个,字大小为36号
Font3 = ImageFont.truetype("C:\Windows\Fonts\simsun.ttc",36,index = 1)
#字体对象1为SHOWG,字大小为48号
Font4 = ImageFont.truetype("C:\Windows\Fonts\SHOWG.TTF",48) #利用text函数添加文字
drawObject.text([200,200],text,font = Font1)
drawObject.text([200,250],text,font = Font2)
drawObject.text([200,300],text,font = Font3)
drawObject.text([200,400],text,font = Font4)

注意:

画笔颜色默认为透明的,直接在白纸上写字是看不到的。所以上面的例子中要先画出一个被颜色填充过的矩形框,在矩形框内添加文字。

画笔的颜色可以通过draw的ink属性来改变:

draw.ink = 0(R) + 0(G) * 256 + 0(B) * 256 * 256

text = "I love python!"
d.rectangle((100,100,600,600),outline = 128)
#字体对象1为simsunb,字大小为36号
Font1 = ImageFont.truetype("C:\Windows\Fonts\simsunb.ttf",36)
#字体对象2在ttc中第一个(我也不知道具体是什么字形),字大小为36号
Font2 = ImageFont.truetype("C:\Windows\Fonts\simsun.ttc",36,index = 0)
#字体对象2在ttc中第二个,字大小为36号
Font3 = ImageFont.truetype("C:\Windows\Fonts\simsun.ttc",36,index = 1)
#字体对象1为SHOWG,字大小为48号
Font4 = ImageFont.truetype("C:\Windows\Fonts\SHOWG.TTF",48)
#在图像上写字
d.ink = 0 + 0 * 256 + 0 * 256 * 256         #黑色
d.text([200,200],text,font = Font1)
d.ink = 255 + 0 * 256 + 0 * 256 * 256       #红色
d.text([200,250],text,font = Font2)
d.ink = 0 + 0 * 256 + 255 * 256 * 256       #蓝色
d.text([200,300],text,font = Font3)
d.text([200,400],text,font = Font4)

3、Font.getsize(text)

返回一个二元素元组,为指定text在指定字体大小之后的size

Questions:

①   Getsize()与textsize()的区别与用途

②   字体加粗、倾斜、下划线、删除线等的设置

③   画图时线宽的规定

④   线型设置(加粗,虚线...)

Python PIL ImageDraw 和ImageFont模块学习的更多相关文章

  1. 【Python开发】Python PIL ImageDraw 和ImageFont模块学习

    ImageDraw 新建一个空白图片为本文作示例,新建空白文件的方法 见Image模块,Image.new: mport Image   blank = Image.new("RGB&quo ...

  2. Python 之路 Day5 - 常用模块学习

    本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configpars ...

  3. Python之路,Day5 - 常用模块学习 (转载Alex)

    本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configpars ...

  4. Python标准库之核心模块学习记录

    内建函数和异常 包括__builtin__模块和exceptions模块 操作系统接口模块 包括提供文件和进程处理功能的os模块,提供平台独立的文件名处理(分拆目录名,文件名,后缀等)的os.path ...

  5. python基础之 re(正则表达式)模块学习

    今天学习了Python中有关正则表达式的知识.关于正则表达式的语法,不作过多解释,网上有许多学习的资料.这里主要介绍Python中常用的正则表达式处理函数. re.match re.match 尝试从 ...

  6. python全栈开发_day15_模块学习

    一:模块 1)什么是模块 每一个py文件就是一个模块 导入模块,会编译执行 1.形成一个对应的pyc文件 2.产生该模块自己的店全局名称空间 3.在使用该模块的全局名称空间中产生一个名字(导入的模块名 ...

  7. Day5 - Python基础5 常用模块学习

    Python 之路 Day5 - 常用模块学习   本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shel ...

  8. 第六章:Python基础の反射与常用模块解密

    本课主题 反射 Mapping 介绍和操作实战 模块介绍和操作实战 random 模块 time 和 datetime 模块 logging 模块 sys 模块 os 模块 hashlib 模块 re ...

  9. Python图像处理库:PIL中Image,ImageDraw等基本模块介绍

    Python图像处理库:PIL中Image,ImageDraw等基本模块介绍 标签: 图像处理PILPYTHON 2016-08-19 10:58 461人阅读 评论(0) 收藏 举报  分类: 其他 ...

随机推荐

  1. iOS开发项目之四 [ 调整自定义tabbar的位置与加号按钮的位置]

    自定义tabbar与按钮的添加 01 - 把系统的tabbar用我们自己的覆盖 LHQTabBar *lhqTabBar = [[LHQTabBar alloc]init]; [self setVal ...

  2. sql中写标量函数生成大写拼音首字母

    USE [StockManageSystemV2] GO /****** Object: UserDefinedFunction [dbo].[PinYin] Script Date: 2016-08 ...

  3. JavaScript - 倒计时

    http://www.helloweba.com/demo/loading/ WEB开发中经常会用到倒计时来限制用户对表单的操作,比如希望用户在一定时间内看完相关协议信息才允许用户继续下一步操作,又比 ...

  4. Html - 仿Ios assistiveTouch 悬浮辅助球工具

    仿Ios assistiveTouch 悬浮辅助球工具 <!DOCTYPE html> <html> <head> <meta charset="u ...

  5. 一些开发遇到的"小问题",你能答对多少?

    我会把问题先写在前面,答案用白色字体写在后面.所以用鼠标选择文本就可以看到答案啦. 调用await后因为切换了线程环境(这种说法可能不严谨,但我只能想到这种说法),httpcontext会为null. ...

  6. 更新AD对象属性值

    1. 对于Set-ADUser不包含的对象属性,可以采用replace来操作 Set-ADUser -Identity 'UserA' -Replace @{userWorkstations = 'C ...

  7. Scrum会议7(Beta版本)

    组名:天天向上 组长:王森 组员:张政.张金生.林莉.胡丽娜 代码地址:HTTPS:https://git.coding.net/jx8zjs/llk.git SSH:git@git.coding.n ...

  8. CSS权威指南 - 基础视觉格式化 2

    行内元素 em a 非替换元素 img 替换元素 两者在内联内容处理方式不一样. inline有时候被翻译成内联,比如inline content,有时候被翻译成行内 inline box. 行布局 ...

  9. DS实验题 Floyd最短路径 & Prim最小生成树

    题目: 提示: Floyd最短路径算法实现(未测试): // // main.cpp // Alg_Floyd_playgame // // Created by wasdns on 16/11/19 ...

  10. 简单实现Redis缓存中的排序功能

    1.在实现缓存排序功能之前,必须先明白这一功能的合理性.不妨思考一下,既然可以在数据库中排序,为什么还要把排序功能放在缓存中实现呢?这里简单总结了两个原因:首先,排序会增加数据库的负载,难以支撑高并发 ...