python画椭圆turtle_python ImageDraw类实现几何图形的绘制与文字的绘制

2023-11-04 05:59

本文主要是介绍python画椭圆turtle_python ImageDraw类实现几何图形的绘制与文字的绘制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

python PIL图像处理模块中的ImageDraw类支持各种几何图形的绘制和文本的绘制,如直线、椭圆、弧、弦、多边形以及文字等。

下面直接通过示例来进行说明:

#-*- coding: UTF-8 -*-

import numpy as np

from PIL import Image

from PIL import ImageDraw

from PIL import ImageFont

def draw_test():

#生成深蓝色绘图画布

array = np.ndarray((480, 640, 3), np.uint8)

array[:, :, 0] = 0

array[:, :, 1] = 0

array[:, :, 2] = 100

image = Image.fromarray(array)

#创建绘制对象

draw = ImageDraw.Draw(image)

#绘制直线

draw.line((20, 20, 150, 150), 'cyan')

#绘制矩形

draw.rectangle((100, 200, 300, 400), 'black', 'red')

#绘制弧

draw.arc((100, 200, 300, 400), 0, 180, 'yellow')

draw.arc((100, 200, 300, 400), -90, 0, 'green')

#绘制弦

draw.chord((350, 50, 500, 200), 0, 120, 'khaki', 'orange')

#绘制圆饼图

draw.pieslice((350, 50, 500, 200), -150, -30, 'pink', 'crimson')

#绘制椭圆

draw.ellipse((350, 300, 500, 400), 'yellowgreen', 'wheat')

#外切矩形为正方形时椭圆即为圆

draw.ellipse((550, 50, 600, 100), 'seagreen', 'skyblue')

#绘制多边形

draw.polygon((150, 180, 200, 180, 250, 120, 230, 90, 130, 100), 'olive', 'hotpink')

#绘制文本

font = ImageFont.truetype("consola.ttf", 40, encoding="unic")#设置字体

draw.text((100, 50), u'Hello World', 'fuchsia', font)

image.show()

return

首先,通过ImageDraw类创建一个绘制对象draw;

draw.line():直线的绘制,第一个参数指定的是直线的端点坐标,形式为(x0, y0, x1, y1),第二个参数指定直线的颜色;

draw.rectangle():矩形绘制,第一个参数指定矩形的对角线顶点(左上和右下),形式为(x0, y0, x1, y1),第二个指定填充颜色,第三个参数指定边界颜色;

draw.arc():(椭)圆弧的绘制,第一个参数指定弧所在椭圆的外切矩形,第二、三两个参数分别是弧的起始和终止角度, 第四个参数是填充颜色,第五个参数是线条颜色;

draw.chord():弦的绘制,和弧类似,只是将弧的起始和终止点通过直线连接起来;

draw.pieslice():圆饼图的绘制,和弧与弦类似,只是分别将起始和终止点与所在(椭)圆中心相连;

draw.ellipse():椭圆的绘制,第一个参数指定椭圆的外切矩形, 第二、三两个参数分别指定填充颜色和线条颜色,当外切矩形是正方形时,椭圆即为圆;

draw.polygon():绘制多边形,第一个参数为多边形的端点,形式为(x0, y0, x1, y1, x2, y2,……),第二、三两个参数分别指定填充颜色和线条颜色;

draw.text():文字的绘制,第一个参数指定绘制的起始点(文本的左上角所在位置),第二个参数指定文本内容,第三个参数指定文本的颜色,第四个参数指定字体(通过ImageFont类来定义)。

绘制结果如下:

2020022610563550.jpg

最后,补充一下python中所支持的颜色,如下图所示:

2020022610563651.jpg

另外,颜色也可以使用"#"加上6位16进制字符串表示如“#ff0000”,则和“red”等价,前两位表示R通道的值,中间两位表示G通道的值,最后两位表示B通道的值。

PS:opencv+python 实现基本图形的绘制及文本的添加

import cv2

import numpy as np

import os

class Drawing(object):

"""

使用opencv绘制图形,支持直线,矩形,圆形,椭圆,多边形以及被标注文字添加

"""

chart_list = ['line', 'rectangle', 'circle', 'ellipse', 'polylines', 'puttext']

def __init__(self, src_img, dst_img, chart, dict_args):

self.src_img = os.path.normpath(src_img)

self.dst_img = os.path.normpath(dst_img)

self.chart = chart

self.dict_args = dict_args

# 颜色不传默认为红色

self.color = dict_args['color'] if dict_args.has_key('color') else (0,0,255)

# 线条粗细不传默认为 2

self.thickness = dict_args['thickness'] if dict_args.has_key('thickness') else 2

def handle(self):

# 导入图片

self.src_img = cv2.imread(self.src_img)

if self.chart not in self.chart_list:

print 'must input your right parameter'

return

if self.chart == 'line':

# 画直线

self.start = self.dict_args['start']

self.end = self.dict_args['end']

self.draw_line()

elif self.chart == 'rectangle':

# 画矩形

self.top_left = self.dict_args['top_left']

self.bottom_right = self.dict_args['bottom_right']

self.draw_rectangle()

elif self.chart == 'circle':

# 画圆形

self.center = self.dict_args['center']

self.radius = self.dict_args['radius']

self.draw_circle()

elif self.chart == 'ellipse':

# 画椭圆

self.center = self.dict_args['center']

self.axes = self.dict_args['axes']

# 旋转角度,起始角度,终止角度 可不传参,使用默认值

self.angle = self.dict_args['angle'] if self.dict_args.has_key('angle') else 0

self.startangle = self.dict_args['startangle'] if self.dict_args.has_key('startangle') else 0

self.endangle = self.dict_args['endangle'] if self.dict_args.has_key('endangle') else 360

self.draw_ellipse()

elif self.chart == 'polylines':

# 画多边形

if not isinstance(self.dict_args['points'], list):

self.pts = list(self.dict_args['points'])

self.pts = np.array(self.dict_args['points'], np.int32)

self.close = self.dict_args['close'] if self.dict_args.has_key('close') else True

self.draw_polylines()

else:

# 标注文本

self.text = self.dict_args['text']

self.position = self.dict_args['position']

# 字体,文字大小 可不传参,使用默认值

self.font = self.dict_args['font'] if self.dict_args.has_key('font') else cv2.FONT_HERSHEY_SIMPLEX

self.size = self.dict_args['size'] if self.dict_args.has_key('size') else 1

self.add_text()

cv2.imwrite(self.dst_img, self.src_img)

def draw_line(self):

# 划线

# 输入参数分别为图像,开始坐标,结束坐标,颜色数组,粗细

cv2.line(self.src_img, self.start, self.end, self.color, self.thickness)

def draw_rectangle(self):

# 画矩形

# 输入参数分别为图像、左上角坐标、右下角坐标、颜色数组、粗细

cv2.rectangle(self.src_img, self.top_left, self.bottom_right, self.color, self.thickness)

def draw_circle(self):

# 画圆形

# 输入参数为图像,圆心,半径,线条颜色,粗细

cv2.circle(self.src_img, self.center, self.radius, self.color, self.thickness)

def draw_ellipse(self):

# 画椭圆

# 输入参数为图像,中心,(长轴,短轴),旋转角度,起始角度,终止角度,线条颜色,粗细

cv2.ellipse(self.src_img, self.center, self.axes, self.angle, self.startangle,self.endangle, self.color, self.thickness)

def draw_polylines(self):

# 画多边形

# 输入参数为图像,多边形各个顶点坐标,是否连成封闭图形,线的颜色,粗细

cv2.polylines(self.src_img, [self.pts], self.close, self.color, self.thickness)

def add_text(self):

# 标注文本

# 输入参数为图像、文本、位置、字体、大小、颜色数组、粗细

cv2.putText(self.src_img, self.text, self.position, self.font, self.size, self.color, self.thickness)

以上就是python ImageDraw类实现几何图形的绘制与文字的绘制的详细内容,更多关于python 几何图形的绘制的资料请关注脚本之家其它相关文章!

这篇关于python画椭圆turtle_python ImageDraw类实现几何图形的绘制与文字的绘制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/343721

相关文章

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

Java实现检查多个时间段是否有重合

《Java实现检查多个时间段是否有重合》这篇文章主要为大家详细介绍了如何使用Java实现检查多个时间段是否有重合,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录流程概述步骤详解China编程步骤1:定义时间段类步骤2:添加时间段步骤3:检查时间段是否有重合步骤4:输出结果示例代码结语作

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

Java覆盖第三方jar包中的某一个类的实现方法

《Java覆盖第三方jar包中的某一个类的实现方法》在我们日常的开发中,经常需要使用第三方的jar包,有时候我们会发现第三方的jar包中的某一个类有问题,或者我们需要定制化修改其中的逻辑,那么应该如何... 目录一、需求描述二、示例描述三、操作步骤四、验证结果五、实现原理一、需求描述需求描述如下:需要在

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

如何通过Python实现一个消息队列

《如何通过Python实现一个消息队列》这篇文章主要为大家详细介绍了如何通过Python实现一个简单的消息队列,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录如何通过 python 实现消息队列如何把 http 请求放在队列中执行1. 使用 queue.Queue 和 reque

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形