python生成随机验证码图片+噪声

embedded/2024/9/22 11:08:30/
python">参数:图片宽高、验证码个数,文字大小
def check_code(width=90, height=30, length=4, font_size=26):code = []from PIL import Image, ImageDrawimg = Image.new(mode='RGB', size=(width, height), color=(255, 255, 255))draw = ImageDraw.Draw(img, mode='RGB')def rndChar():# 定义字符的ASCII码范围ascii_ranges = [(48, 57),  # 数字 0-9(65, 90),  # 大写字母 A-Z(97, 122),  # 小写字母 a-z]# 随机选择一个范围chosen_range = random.choice(ascii_ranges)# 在选定的范围内随机选择一个字符并返回return chr(random.randint(chosen_range[0], chosen_range[1]))def rndColor():# 随机颜色,不用255因为有点浅return (random.randint(0, 200), random.randint(0, 200), random.randint(0, 200))# 绘制字符for i in range(length):char = rndChar()code.append(char)h = random.randint(0, 3)w = i * width / length + random.randint(-2, 5)draw.text(xy=(w, h), text=char, fill=rndColor(), font_size=font_size)# 绘制干扰像素点for _ in range(40):draw.point(xy=(random.randint(0, width), random.randint(0, height)), fill=(255, 255, 255))# 绘制干扰圈for _ in range(30):x = random.randint(0, width)y = random.randint(0, height)draw.arc(xy=(x, y, x + 5, y + 5), start=random.randint(0, 180), end=random.randint(180, 360), fill=rndColor())# 绘制干扰线for i in range(5):x1, y1 = random.randint(0, width), random.randint(0, height)x2, y2 = random.randint(0, width), random.randint(0, height)draw.line(xy=(x1, y1, x2, y2), fill=rndColor())img.save(r'F:\Code\PythonCode\djangoProject\app02\static\img\code.png')return img, ''.join(code)


http://www.ppmy.cn/embedded/24877.html

相关文章

react props传参

props是父子传参的常用方法。 一、主要功能 1.传参 定义:父级组件向子级组件传递参数。 2.验证数据类型格式 定义:可以指定父组件传递过来数据为指定类型。 3.设置默认值 定义:在参数未使用时,直接默认为指定值。 二、实例代…

iOS 创建开源库时如何使用图片和xib资源

参考文章 参考文章 使用xib的正确姿势 #define MAIN_BUNDLE [NSBundle bundleForClass:[self class]] //获取bundle [[MAIN_BUNDLE loadNibNamed:itemResuableStr owner:self options:nil] lastObject]; //加载xib [tempCollectionView registerNib:[UINib nibWithNibName…

【JS】找出两个数组中的相同元素与不同元素

一、找出相同元素 &#xff08;1&#xff09;方法一 const filterArr (arr1, arr2) > {let result [];for (let i 0; i < arr1.length; i) {for (let j 0; j < arr2.length; j) {if (arr1[i] arr2[j]) {result.push(arr1[i]);}}}return result; };&#xff08;…

JVM学习

目录 背景步骤是什么由什么构成加载分配内存堆目的构成分代问题 栈方法区 内存空间初始化销毁垃圾 &#xff1a;判断是否还活着引用计数法可达性分析算法 垃圾回收收集收集器垃圾收集算法 逃逸分析 对象出现问题JVM 的常见参数配置JVM调优 总结 背景 JVM和对象分不开&#xff…

Akamai 分布式“云+边缘”,打造下一代数字化基座

当下&#xff0c;数字化基础设施正逐步向分布式部署演化&#xff0c;云计算与边缘计算正在成为两大技术支柱。Gartner 数据显示&#xff0c;云服务占 IT 整体支出比例连年上涨&#xff0c;在过去一年已增长至12.1%&#xff1b;IDC 报告显示&#xff0c;截至2021年已有超过500亿…

密文域可逆信息隐藏技术综述(上)

加密图像可逆信息隐藏是一种加密原始图像后&#xff0c;在密文图像中可逆地隐藏附加数据&#xff0c;并且在数据提取后&#xff0c;原始图像可以被无损重建的技术。RDH-EI的分类如图1所示。 按对图像的加密方法&#xff0c;现有RDH-EI算法可分为对称加密域和非对称(公钥)加密域…

Python中的错误处理与资源管理:try、except、finally与with语句详解

Python中的错误处理与资源管理&#xff1a;try、except、finally与with语句详解 在Python编程中&#xff0c;错误处理和资源管理是两个至关重要的概念。Python提供了try、except、finally和with等语句&#xff0c;帮助我们有效地处理运行时错误&#xff0c;并确保资源的正确释…

RCE复习(ctfhub下)

先了解一下命令注入的知识点&#xff1a; 知识点 1、常见的拼接符 A ; B 先执行A&#xff0c;再执行BA & B 简单的拼接A | B 显示B的执行结果A&&B A执行成功之后才会执行BA || B A执行失败之后才会执行B , 在特殊情况下可代替空格…