python图像处理库-------PIL库ImageDraw模块

一、ImageDraw模块的概念

1、 Coordinates

绘图接口使用和PIL一样的坐标系统,即(0,0)为左上角。

2、 Colors

        用户可以使用函数 Image.new 或者 Image.putpixel 指定颜色,函数输入的值为:数字或者元组。

  • 对于模式为“1”,“L”和“I”的图像,使用整数。
  • 对于“RGB”图像,使用整数组成的3元组。
  • 对于“F”图像,使用整数或者浮点数。
  • 对于调色板图像(模式为“P”),使用整数作为颜色索引。在 PIL1.1.4及其以后,用户也可以使用RGB 3元组或者颜色名称。绘制层将自动分配颜色索引,只要用户不绘制多于256种颜色。

3、 Colors Names

在PIL 1.1.4及其以后的版本,用户绘制“RGB”图像时,可以使用字符串常量。PIL支持如下字符串格式:

A、 十六进制颜色说明符,定义为“#rgb”或者“#rrggbb”。例如,“#ff0000”表示纯红色。

B、 RGB函数,定义为“rgb(red, green, blue)”,变量red、green、blue的取值为[0,255]之间的整数。另外,颜色值也可以为[0%,100%]之间的三个百分比。例如,“rgb(255, 0, 0)”和“rgb(100%, 0%, 0%)”都表示纯红色。

C、 HSL(Hue-Saturation-Lightness)函数,定义为“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%)”为纯红色。

D、 通用HTML颜色名称,ImageDraw模块提供了140个标准颜色名称,Xwindow系统和大多数web浏览器都支持这些颜色。颜色名称对大小写不敏感。例如,“red”和“Red”都表示纯红色。

4、 Fonts

PIL可以使用bitmap字体或者OpenType/TrueType字体。

Bitmap字体被存储在PIL自己的格式中,它一般包括两个文件,一个叫.pil,它包含字体的矩阵,另一个通常叫做.pbm,它包含栅格数据。

  • 在ImageFont模块中,使用函数 load() 加载一个bitmap字体。
  • 在ImageFont模块中,使用函数 truetype() 加载一个OpenType/TrueType字体。注意:这个函数依赖于第三方库,而且并不是在所有的PIL版本中都有效
  • 在ImageFont模块的中,使用Font()结构函数,(IronPIL)加载内置的字体。

二、ImageDraw模块的函数

1、 Draw

定义:Draw(image) ⇒ Draw instance
含义:创建一个可以在给定图像上绘图的对象。

(IronPIL)用户可以使用ImageWin模块的HWND或者HDC对象来代替图像。这个允许用户直接在屏幕上绘图。
注意:图像内容将会被修改

fromPIL import Image, ImageDraw
im01 =Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")
draw =ImageDraw.Draw(im01)
draw.line((0,0) +im01.size, fill=128)#假设图片大小是512x480,则im01.size = [512,480].(0,0)表示图片的左上角像素点,im01.size = [512,480]表示图片的右下角像素点。两点进行连线。
draw.line((0,im01.size[1], im.size[0], 0), fill = 128)#im01.size[1] = 480 ,im.size[0] = 512 ,(0,im01.size[1])表示图片的左下角像素点,(im.size[0], 0)表示图片的右上角像素点 。两点进行连线。fill表示填充的颜色
im01.show()#显示画完线后的图片
del draw

输出结果:
图 1

三、ImageDraw模块的方法

1、 Arc–弧线

定义:draw.arc(xy, start, end, options)
含义:在给定的区域内,在开始和结束角度之间绘制一条弧(圆的一部分)。
变量options中fill设置弧的颜色。

from PIL import Image,ImageDraw
im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")
draw =ImageDraw.Draw(im01)
draw.arc((0,0,200,200),0, 90, fill = (255,0,0))
draw.arc((300,300,500,500), 0, -90, fill = (0,255,0))
draw.arc((200,200,300,300),-90, 0, fill = (0,0,255))
im01.show()
del draw

输出结果:
图 2
注意:变量xy是需要设置一个区域,此处使用4元组,包含了区域的左上角和右下角两个点的坐标。此PIL版本中,变量options不能使用outline,会报错:“TypeError: arc() got an unexpected keyword argument ‘outline’”;所以此处应该使用fill。

在图像01上(0,0,200,200)区域使用红色绘制了90度的弧,(300,300,500,500)区域使用绿色绘制了270度的弧,(200,200,300,300)区域使用蓝色绘制了90度的弧。这些弧都是按照顺时针方向绘制的。变量start/end的0度为水平向右,沿着顺时针方向依次增加
图 3

2、 Bitmap–位图

定义:draw.bitmap(xy, bitmap, options)

含义:在给定的区域里绘制变量bitmap所对应的位图,非零部分使用变量options中fill的值来填充。变量bitmap位图应该是一个有效的透明模板(模式为“1”)或者蒙版(模式为“L”或者“RGBA”)。

这个方法与Image.paste(xy, color, bitmap)有相同的功能。

from PIL import Image,ImageDraw
im01 =Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")
im02 =Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")
im =im02.resize(300,200)#设置图片im02的宽度和高度
im.size(300, 200)
r,g,b =im.split()#r,g,b=im02.split()这个方法是将im02图片的三色通道分开,并将各个通道的值存入r,g,b变量之中。。
draw =ImageDraw.Draw(im01)#创建关于im01图片的绘图变量
draw.bitmap((0,0), r, fill = (255,0,0))#图片im01上填入r通道信息,显示位图
draw.bitmap((300,200), g, fill = (0,255,0))#图片im01上填入g通道信息,显示位图
draw.bitmap((600,400), b, fill = (0,0,255))#图片im01上填入b通道信息,显示位图
im01.show()

输出结果:
图

3、 Chord–弦内区域

定义:draw.chord(xy,start, end, options)

含义:和方法arc()一样,但是使用直线连接起始点。

变量options的outline给定弦轮廓的颜色。Fill填涂弦内区域的颜色。

from PIL import Image, ImageDraw
im01 =Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")
draw =ImageDraw.Draw(im01)
draw.chord((0,0,200,200),0, 90, fill = (255,0,0))
draw.chord((300,300,500,500), 0, -90, fill = (0,255,0))
draw.chord((200,200,300,300), -90, 0, fill = (0,0,255))
im01.show()

输出结果:
图 5

4、 Ellipse–圆形和椭圆形

定义:draw.ellipse(xy,options)

含义:在给定的区域绘制一个椭圆形。

变量options的outline给定椭圆形轮廓的颜色。Fill给定椭圆形内部的颜色。

from PIL import Image, ImageDraw
im01 =Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")
draw =ImageDraw.Draw(im01)
draw.ellipse((0,0, 200, 200), fill = (255, 0, 0))#划分正方形区域,则会画圆形
draw.ellipse((200,200,400,300),fill = (0, 255, 0))#划分长方形区域,则会画椭圆形
draw.ellipse((400,400,800,600), fill = (0, 0, 255))#划分长方形区域,则会画椭圆形
im01.show()

输出结果:
图 366

5、 Line–线条

定义:draw.line(xy,options)

含义:在变量xy列表所表示的坐标之间画线。

坐标列表可以是任何包含2元组[(x,y),…]或者数字[x,y,…]的序列对象。它至少包括两个坐标。

变量options的fill给定线的颜色。

(New in 1.1.5)变量options的width给定线的宽度。注意:线连接不是很好,所以多段线段连接不好看

from PIL import Image, ImageDraw
im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")
draw = ImageDraw.Draw(im01)
draw.line([(0,0),(100,300),(200,500)], fill = (255,0,0), width = 5)
draw.line([50,10,100,200,400,300], fill = (0,255,0), width = 10)
im01.show()

输出结果:
在这里插入图片描述

6、 Pieslice–扇形区域

定义:draw.pieslice(xy,start, end, options)

含义:和方法arc()一样,但是在指定区域内结束点和中心点之间绘制直线。

变量options的fill给定pieslice内部的颜色。

from PIL import Image, ImageDraw
im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")
draw = ImageDraw.Draw(im01)
draw.pieslice((0,0,100,200), 0, 90, fill = (255,0,0))
draw.pieslice((100,200,300,400), 0, -90, fill = (0,255,0))
im01.show()

输出结果:
图 32

8、 Polygon–多边形区域

定义:draw.polygon(xy,options)

含义:绘制一个多边形。

多边形轮廓由给定坐标之间的直线组成,在最后一个坐标和第一个坐标间增加了一条直线,形成多边形。

坐标列表是包含2元组[(x,y),…]或者数字[x,y,…]的任何序列对象。它最少包括3个坐标值。

变量options的fill给定多边形内部的颜色。

from PIL import Image, ImageDraw
im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")
draw = ImageDraw.Draw(im01)
draw.polygon([(0,0),(100,150), (210, 350)], fill = (255, 0, 0))
draw.polygon([300,300,100,400, 400, 400], fill = (0, 255, 0))
>>>im01.show()

图 35

9、 Rectangle–矩形区域

定义:draw.rectangle(box,options)

含义:绘制一个长边形。

变量box是包含2元组[(x,y),…]或者数字[x,y,…]的任何序列对象。它应该包括2个坐标值。

注意:当长方形没有没有被填充时,第二个坐标对定义了一个长方形外面的点。

变量options的fill给定长边形内部的颜色。

from PIL import Image, ImageDraw
im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")
draw = ImageDraw.Draw(im01)
draw.rectangle((0,0,100,200), fill = (255,0,0))
draw.rectangle([100,200,300,500],fill = (0,255,0))
draw.rectangle([(300,500),(600,700)], fill = (0,0,255))
im01.show()

输出结果:
图 25

10、 Text–文本文字

定义:draw.text(position,string, options)

含义:在给定的位置绘制一个字符创。变量position给出了文本的左上角的位置。

变量option的font用于指定所用字体。它应该是类ImangFont的一个实例,使用ImageFont模块的load()方法从文件中加载的。

变量options的fill给定文本的颜色。

from PIL import Image, ImageDraw
im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")
draw = ImageDraw.Draw(im01)
draw.text((0,0),"Hello", fill = (255,0,0))
im01.show()

输出效果:在图像01的(0,0)位置绘制出字符串“Hello”。

11、 Textsize

定义:draw.textsize(string,options)⇒ (width, height)

含义:返回给定字符串的大小,以像素为单位。

变量option的font用于指定所用字体。它应该是类ImangFont的一个实例,使用ImageFont模块的load()方法从文件中加载的。

>>>from PIL import Image, ImageDraw

>>>im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>>draw = ImageDraw.Draw(im01)

>>>draw.textsize("Hello")

(30, 11)

>>>draw.textsize("Hello, the world")

(96, 11)

>>>im01.show()
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值