python如何画弧线,并设置颜色....最好用graphics库,,,或者Tkinter实在不行的话

Python017

python如何画弧线,并设置颜色....最好用graphics库,,,或者Tkinter实在不行的话,第1张

在graphics中没有找到画弧线的方法,你是要将弧线画在什么地方呢?

可以使用PIL库来实现,先下载安装一下PIL(Python Imaging Library)库,然后运行下面代码:

# -*- coding: cp936 -*-

from PIL import Image, ImageDraw

im = Image.new('RGBA', (200,200) ) #建立一块200*200像素的画布(im)

draw = ImageDraw.Draw(im) #在画布上准备好“笔”(draw)

draw.arc((50, 50, 150, 150), 100,300, fill="#00ffff") #在画布上用“笔”画一段弧线

#(50, 50, 150, 150)是指这个圆在画布上左上角(50,50)右下角(150,150)的方框内;即是以(100,100)为圆心,50为半径的圆。

#100,300 表示这段弧是在上述圆的角度100度到300度之间

#fill="#00ffff" 表示设置的颜色

im.show() #将图像显示出来

im.save('1.png') #也可以将图像保存到指定路径

以上代码在python2.6环境中测试可用。

希望对你有所帮助~~~

轮廓搜索

Cv2的方法。findContours用于查找轮廓。代码示例如下:

Cr、t = cv2。cv2 findContours (b。retr_tree cv2.chain_approx_simple) #

第三个参数定义了轮廓的近似方式

在上述函数的参数中,第一个参数是二值化矩阵,第二个参数是获得轮廓的方式,第三个参数是定义轮廓的近似方式。

搜索大纲

Cv2方法。FindContours用于查找contours。代码示例如下:

Cr t等于cv2。Cv2 findContours (b. retr_tree Cv2 .chain_approx_simple) #

第三个参数定义了轮廓的近似方式

上述函数的参数中,第一个参数是二值化矩阵,第二个参数是获取轮廓的方式,第三个参数是定义轮廓的近似方式。

本文是接上一篇 ❤️【Python从入门到精通】(二十六)用Python的PIL库(Pillow)处理图像真的得心应手❤️ 进一步介绍Pillow库的使用, 本文将重点介绍一些高级特性:比如如何利用Pillow画图形(圆形,正方形),介绍通过Pillow库给图片添加水印;同时对上一篇文章未介绍的常用知识点进行补充说明。希望对读者朋友们有所帮助。

上一篇文章已经介绍了Image模块,但是介绍的还不够全面,例如如何从网页中读取图片没有介绍到,如何裁剪图片都没有介绍到。

读取网页中的图片的基本实现方式是:首先利用requests库读取当前图片链接的内容,接着将内容转成二进制数据,在通过open方法将该二进制数据,最后通过save方法进行保存。

读取结果是:

通过crop方法可以从图片中裁剪出一个指定大小的区域。裁取的区域范围是 (left, upper, right, lower) 比如从某个宽高都是400的图片中裁剪一个是宽高都是100的正方形区域,只需要指定裁剪区域的坐标是: (0, 0, 100, 100)

有裁剪还有一个方法就是重新设置图片大小的方法 resize,比如将前面400 400的图片 修改成 300 200,只需要调用resize方法

通过 convert方法进行图片模式的转换

前面介绍的ImageDraw库,只是介绍了利用它来向图片写入文本,其实ImageDraw模块还有一个更有用的途径,就是可以通过它来画各种图形。

首先创建一个600*600的画布。然后再画布中画出一个正方形,画直线的方法是 line方法。

ImageDraw.line(xy, fill=None, width=0, joint=None)

在xy的坐标之间画一条直线

xy-->在两个坐标点之间画一条直线,坐标点的传入方式是[(x, y), (x, y), ...]或者[x, y, x, y, ...]

fill-->直线的颜色

width-->直线的宽度

画一个边框宽度为2px,颜色为蓝色的,面积为400*400的正方形。

ImageDraw.arc(xy, start, end, fill=None, width=0)

在给定的区域范围内,从开始角到结束角之间绘制一条圆弧

xy--> 定义边界框的两个点,传入的格式是[ (x0, y0), (x1, y1)] 或者 [x0, y0, x1, y1] ,其中 x1>=x0,y1>=y0

start -->起始角度,以度为单位,从3点钟开始顺时针增加

end-->结束角度,以度为单位

fill-->弧线的颜色

width-->弧线的宽度

这里就是画了一个半圆,如果结束角度是360度的话则就会画一个完整的圆。

画圆通过ImageDraw.ellipse(xy, fill=None, outline=None, width=1) 方法,该方法可以画出一个给定范围的圆

xy-->定义边界框的两个点,传入的格式是[ (x0, y0), (x1, y1)] 或者 [x0, y0, x1, y1] ,其中 x1>=x0,y1>=y0

outline-->轮廓的颜色

fill --->填充颜色

width-->轮廓的宽度

ImageDraw.chord(xy, start, end, fill=None, outline=None, width=1) 方法用来画半圆,跟arc()方法不同的是它会用直线将起始点和结束点连接起来

xy-->定义边界框的两个点,传入的格式是[ (x0, y0), (x1, y1)] 或者 [x0, y0, x1, y1] ,其中 x1>=x0,y1>=y0

outline-->轮廓的颜色

fill --->填充颜色

width-->轮廓的宽度

ImageDraw.pieslice(xy, start, end, fill=None, outline=None, width=1)

类似于arc()方法,不过他会在端点和圆点之间画直线

xy--> 定义边界框的两个点,传入的格式是[ (x0, y0), (x1, y1)] 或者 [x0, y0, x1, y1] ,其中 x1>=x0,y1>=y0

start -->起始角度,以度为单位,从3点钟开始顺时针增加

end-->结束角度,以度为单位

fill-->弧线的颜色

width-->弧线的宽度

ImageDraw.rectangle(xy, fill=None, outline=None, width=1)

xy-->在两个坐标点之间画一条直线,坐标点的传入方式是[(x, y), (x, y), ...]或者[x, y, x, y, ...]

outline-->轮廓的颜色

fill-->填充的颜色

width-->轮廓线的宽度

ImageDraw.rounded_rectangle(xy, radius=0, fill=None, outline=None, width=1) 该方法可以画一个圆角矩形

xy-->在两个坐标点之间画一条直线,坐标点的传入方式是[(x, y), (x, y), ...]或者[x, y, x, y, ...]

radius-->角的半径

outline-->轮廓的颜色

fill-->填充的颜色

width-->轮廓线的宽度

这里有个问题,就是画好的图形如何从Image中扣出来呢?

ImageEnhance模块主要是用于设置图片的颜色对比度亮度锐度等啥的,增强图像。

原始图像

ImageFilter模块主要用于对图像进行过滤,增强边缘,模糊处理,该模块的使用方式是 im.filter(ImageFilter) 。

其中ImageFilter按照需求传入指定的过滤值。

下面一个个试下效果

4.边缘增强

ImageGrab模块主要用于对屏幕进行截图,通过grab方法进行截取,如果不传入任何参数则表示全屏幕截图,否则是截取指定区域的图像。其中box格式是:(x1,x2,y1,y2)

利用Pillow库可以轻易的对图像增加水印

首先,用PIL的Image函数读取图片

接着,新建一张图(尺寸和原图一样)

然后,在新建的图象上用PIL的ImageDraw把字给画上去,字的颜色从原图处获取。

原图

添加文字后的效果图

本文详细介绍了Pillow库的使用,希望对读者朋友们有所帮助。

Pillow官方文档

需要获取源码的小伙伴可以关注下方的公众号,回复【python】