人生不易且无趣,一起来找点乐子吧。欢迎评论,和文章无关的也可以。
这次说下ImageDraw module,其实从名字上就可以看出来,这个模块的功能是什么。就是在图片上绘制一些东西,比如文字,简单图形啊什么的。
下面我们就来看看模块下的几个方法的运用。
这次换张图片:
首先,如果我们想要对图片进行操作,我们先要得到他的对象,然后再调用方法。Draw方法,返回ImageDraw对象。
ImageDraw.Draw():
方法要吞掉一个Image对象,返回ImageDraw对象
im = Image.open('5.jpg')
draw = ImageDraw.Draw(im)#mode 默认为im.mode
类似于这个样子,draw有两个参数,除此外,还有mode,默认情况和im.mode相同,如果想转变,改就是了。
draw就是我们获得的对象。就可以调用下面的方法进行处理了。
line(xy, fill):
望文生义,划线。xy是坐标序列,列表,元祖等都可以,只要是序列类型皆可。而且数量不限。比如【0,0,10,20,30,50,70,100】,他就会分别从(0,0),(10,20),(30,50),(70,100)间划线。
fill参数是线的颜色。
def line():
im = Image.open('5.jpg')
draw = ImageDraw.Draw(im)#mode 默认为im.mode
draw.line((0, 0)+im.size, fill=120)
draw.line((0, im.size[1], im.size[0], 0), fill=120)
im.save('line.jpg')
im.close()
来看这个,参数是个tuple,第一条线是从图片的左上角到右下角,第二条线是从左下,到右上。所以执行结果也就是在图片上打个大花叉。
text(xy, text, fill, font, spacing, direction):
在图片上绘制文字,这种功能随便的手机编辑一下就是了哈,这里我们不讨论他的功能实用性。只是单纯的学习。
xy是文字左上角起始位置,text是待编辑文字,fill文字颜色。font是个ImageFont的实例,这个我们后面去讲,spacing是字体间距,direction参数是排列的方向,参数值有rtl,ttb两种。不好记?很好记,right to left, top to button。开头缩写而已。(整的那么高大上!!!)
我们再说下这个:
arc(xy,start,end,fill):
这个方法是画圆,xy需要给个box。比如在像素点(0,0)和(100,100)之间画圆。start是初始角度,0度为正右方。end当然就是结束角度,不过注意,画圆方向为顺时针,fill同上。来看个例子:
def text():
base = Image.open('5.jpg').convert('RGBA')
d = ImageDraw.Draw(base)
d.text((10, 10), 'Hello\nworld', fill=(255, 255, 255, 0))#font是个imagefont实例 spacing字体间距 direction rtl ttb
d.text((10, 60), 'World', fill=(255, 255, 255, 255))
d.arc([60,60,100,100],0,270,fill='red')#box, start angle, end angle, fill color
base.save('txt.png')
base.close()
写了个hello word,画了三分之一圆。
chord(xy, start, end, fill, outline):
这个方法和arc功能相同,outline是划线颜色,而fill是填充颜色。与arc的区别是,画完图之后,会将末位点和起始点连接起来。
def chord():#和弦
base = Image.open('5.jpg').convert('RGBA')
d = ImageDraw.Draw(base)
d.chord([60,60,120,100],0,270,fill='blue', outline='yellow')
base.save('chrod.png')
base.close()
至于chord的含义,我不太懂,有和弦、基调的意思。不知具体想要表达的意思,估计是链接吧,藕断丝连?(什么鬼!!!)
无妨:
pieslice():
参数和功能都和chord一样,区别在于最后将末位点与起始点连接到中心:
ellipse()
很简单,就是画椭圆嘛。参数和画圆的都一样,而且通过arc也可以实现相同的功能,直接看下效果吧。
rectangle(xy,fill,outline)
功能明确,参数清晰是吧。都不需要过脑子的(也可能是根本就没有),xy给出rectangle的左上和右下的像素点坐标,fill填充,outline是pen color。
def rectangle():
base = Image.open('5.jpg').convert('RGBA')
d = ImageDraw.Draw(base)
d.rectangle([60,60,120,80],fill='red',outline='white')
base.save('rectangle.png')
base.close()
polygon
(xy, fill, outline)
polygon,多边形。xy又是个像素点坐标的序列。我们随便给几个点:
def polygon():
base = Image.open('5.jpg').convert('RGBA')
d = ImageDraw.Draw(base)
d.polygon([60,60,100,60,130,80,80,150],fill='white',)
base.save('polygon.png')
base.close()
point
(xy, fill)
这个有趣,画点点。参数没什么区别。直接看看例子吧:
def point():
base = Image.open('5.jpg').convert('RGBA')
d = ImageDraw.Draw(base)
d.point([60,60,62,60,64,60,66,60,68,60,70,60],fill='white')
base.save('point.png')
base.close()
横着一排点了几个点,fill是点点颜色:
好小,手动指明。哈哈.......
ok,这个模块差不多就这样吧,还有几个方法的开发在测试阶段,但是功能也高级不到哪去。就这样了,拜。
后记:
括号里的内容是第二次审看添加的内容,旨在您阅读时引起极大的舒适。别人怎么看你不重要,你怎么看你也不重要。重要的是你怎么看别人怎么看你,别管他,做你就好。