python本地生成验证码图片

news/2025/10/9 17:12:10/文章来源:https://www.cnblogs.com/vetra/p/19131552
from io import BytesIO
from PIL import Image, ImageDraw, ImageFont
from captcha.image import ImageCaptcha
import random, stringdef get_captcha_picture():chr_all = string.ascii_uppercase + string.digits  # 只使用大写字母和数字,避免混淆chr_4 = ''.join(random.sample(chr_all, 4))# 使用PIL创建验证码图片(替代ImageCaptcha)width, height = 120, 40image = Image.new('RGB', (width, height), color=(240, 240, 240))draw = ImageDraw.Draw(image)try:# 尝试使用系统字体font = ImageFont.truetype("arial.ttf", size=24)except IOError:try:# 尝试其他常见字体font = ImageFont.truetype("DejaVuSans.ttf", size=24)except IOError:# 使用默认字体font = ImageFont.load_default()# 绘制验证码文本for i, char in enumerate(chr_4):x = 10 + i * 25 + random.randint(-3, 3)y = 5 + random.randint(-3, 3)draw.text((x, y), char, fill=(random.randint(0, 100), random.randint(0, 100), random.randint(0, 100)),font=font)# 添加干扰线for _ in range(3):x1 = random.randint(0, width)y1 = random.randint(0, height)x2 = random.randint(0, width)y2 = random.randint(0, height)draw.line((x1, y1, x2, y2), fill=(random.randint(150, 200), random.randint(150, 200), random.randint(150, 200)),width=1)# 添加噪点for _ in range(50):x = random.randint(0, width - 1)y = random.randint(0, height - 1)draw.point((x, y), fill=(random.randint(150, 200), random.randint(150, 200), random.randint(150, 200)))# 将图片转换为二进制数据buffered = BytesIO()image.save(buffered, format="JPEG", quality=95)  # 明确指定质量和格式return image

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/933716.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS 7 一键安装 vsftpd 并创建可登录 FTP 用户 test - 教程

CentOS 7 一键安装 vsftpd 并创建可登录 FTP 用户 test - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Con…

破解工地防盗难题:如何利用国标GB28181视频平台EasyCVR实现视频监控统一管理?

破解工地防盗难题:如何利用国标GB28181视频平台EasyCVR实现视频监控统一管理?一、方案背景 在当代建筑施工领域,安全监管和防盗监控是保障工程顺利进行和资产安全的关键措施。随着科技进步,传统的监控系统已不足以…

autogen论文解读 - Sun

论文背景 该论文介绍的是微软的一个多智能体框架,曾经获得了ICLR2024大会LLM智能体专题研讨会最佳论文。在开发基于LLM的复杂应用程序时遇到了很多问题:以往的研究往往基于单个LLM 智能体,但这无法解决复杂任务,因…

高效仿真:功耗与散热攻略

在当今 IC 设计中,“功耗与热管理”是确保系统稳定性和可靠性的关键一环。本文深度聚焦仿真平台在动态功耗分析与热行为模拟中的应用,结合实际案例与现代工具,为你系统解锁仿真中的热控挑战与优化路径。 1、动态功耗…

编程开发工具集合汇总

编程开发工具集合汇总Posted on 2025-10-09 16:55 lzhdim 阅读(0) 评论(0) 收藏 举报这次提供编程开发工具集合的下载。通过网盘分享的文件:  链接: https://pan.baidu.com/s/1WWCFSerGZhhl4V0SS7UjMw?pwd=yi…

各编程语言对应的开发工具软件

各编程语言对应的开发工具软件Posted on 2025-10-09 17:00 lzhdim 阅读(0) 评论(0) 收藏 举报以下内容基于 2024~2025 年公开资料整理,给出主流编程语言与“官方/社区公认最常用”开发工具(IDE 或专用编辑器)…

Vue Day7 VueX ESLint介绍

这里先了解VueX,为后面 Vue3 的Pinia做准备VueX是一个Vue的状态(即数据)管理插件,可以帮我们管理vue通用的数据(多组件共享的数据)

win7无线网络连接wifi名称乱码

win7无线网络连接wifi名称乱码 我想让他输出乱码的格式,没成with open("wifiencode.txt", "w", encoding="utf-8") as f:f.write("读者无线")text = "读者无线" …

【完结】-固态硬盘ssd

固态硬盘SSD 原理 基于闪存技术Flash Memory 属于EEPROM 组成 闪存翻译层:负责翻译逻辑块号,找到对应的页 存储介质:多个闪存芯片(flash chips)--每个芯片包含多个块(block)--每个块包含多个页(page) 读写性能…

Vue的nextTick函数作用

在 Vue 中,nextTick 是一个非常重要的异步工具函数,用于在 DOM 更新完成后执行回调逻辑。它常用于你想在 Vue 更新数据后立即操作最新的 DOM 元素时。✅ 简单定义 js复制代码Vue.nextTick(callback)或在 Vue 3 中(使…

# 中国大模型落地应用研究报告2025 - 深度导读与趋势分析

# 中国大模型落地应用研究报告2025 - 深度导读与趋势分析Posted on 2025-10-09 16:51 吾以观复 阅读(0) 评论(0) 收藏 举报关联知识库:# 中国大模型落地应用研究报告2025 - 深度导读与趋势分析中国大模型落地应…

# JetBrains 2024开发者生态调查报告推荐

# JetBrains 2024开发者生态调查报告推荐Posted on 2025-10-09 16:51 吾以观复 阅读(0) 评论(0) 收藏 举报关联知识库:# JetBrains 2024开发者生态调查报告推荐JetBrains 2024开发者生态调查报告推荐 ** 报告链…

# ShowMeBug技术评估创新案例:从八股文到实战编程的招聘革命

# ShowMeBug技术评估创新案例:从八股文到实战编程的招聘革命Posted on 2025-10-09 16:51 吾以观复 阅读(0) 评论(0) 收藏 举报关联知识库:# ShowMeBug技术评估创新案例:从八股文到实战编程的招聘革命ShowMeB…

# ️ GitHub工程师肖恩戈德克的系统设计哲学:从复杂到简单的工程智慧

# ️ GitHub工程师肖恩戈德克的系统设计哲学:从复杂到简单的工程智慧Posted on 2025-10-09 16:51 吾以观复 阅读(0) 评论(0) 收藏 举报关联知识库:# ️ GitHub工程师肖恩戈德克的系统设计哲学:从复杂到简单的工…

README生成和更新Prompt

README生成和更新PromptPosted on 2025-10-09 16:51 吾以观复 阅读(0) 评论(0) 收藏 举报关联知识库:README生成和更新PromptREADME生成和更新Prompt 核心目标 文档清晰 > 自动化 - 手动指定文件类型,生成结…

#6515. 「雅礼集训 2018 Day10」贪玩蓝月

其实 \(4, 5\) 操作都不重要,重要的是这个维护的思路。 考虑维护两个栈,插入的话就往前插就插入第一个栈,否则插入第二个栈,此时我们可以动态的维护一个 DP 数组,表示每个栈中的答案。 如果删除的话,我们就向指向…

车企数据治理平台化实战:从数据孤岛到全链路治理的架构演进

在汽车产业智能化转型背景下,数据已成为驱动研发、制造、营销与服务创新的核心资产。某大型整车制造企业面对系统烟囱林立、数据标准不统一、质量管控难等典型问题,通过构建企业级数据治理平台,实现了从数据规范制定…

完整教程:Java中的缓存机制与分布式缓存实现!

完整教程:Java中的缓存机制与分布式缓存实现!pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &…

jsconfig.json-vscode或cursor ctrl点击@路径,快速到达

vscode或cursor ctrl点击@路径,快速到达 {"allowJs": true,"compilerOptions": {"baseUrl": ".","paths": {"@/*": ["./src/*"]}},"inc…

C# 弃元模式:从语法糖到性能利器的深度解析

在 C# 的语法演进中,“弃元(Discard)” 以一个简单的下划线 _ 成为了既提升代码可读性,又优化性能的 “双料特性”。它并非单纯的语法简化,而是编译器层面对 “有意忽略的值” 的深度优化 —— 通过明确 “忽略”…