当前位置: 首页 > news >正文

python本地生成验证码图片

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.hskmm.com/?act=detail&tid=27436

相关文章:

  • CentOS 7 一键安装 vsftpd 并创建可登录 FTP 用户 test - 教程
  • 【完结】-固态硬盘ssd
  • 破解工地防盗难题:如何利用国标GB28181视频平台EasyCVR实现视频监控统一管理?
  • autogen论文解读 - Sun
  • 高效仿真:功耗与散热攻略
  • Vue的nextTick函数作用
  • #6515. 「雅礼集训 2018 Day10」贪玩蓝月
  • 公告
  • 车企数据治理平台化实战:从数据孤岛到全链路治理的架构演进
  • 磁盘的管理
  • 完整教程:Java中的缓存机制与分布式缓存实现!
  • jsconfig.json-vscode或cursor ctrl点击@路径,快速到达
  • C# 弃元模式:从语法糖到性能利器的深度解析
  • 2025钣金加工厂家最新推荐榜:精密工艺与定制服务口碑之选
  • python查询数据信息,分析前了解表格结构
  • 减少磁盘延迟的方法
  • AutoCAD 2025 CAD 安装包中文永久免费免激活破解版下载 附图文安装教程
  • nmcli修改ip地址
  • 静态库与动态库:开发者必知的底层逻辑与实践技巧
  • 从C到pwn入门
  • 基于MATLAB的三轴航天器姿态控制的仿真
  • golang基础语法(四) 数组 - 教程
  • for循环s.length()-1,s为空时的一直执行循环的问题
  • 自适应工作负载的智能系统构建技术解析
  • aardio获取exe路径
  • 分布式系统学习(一):相关概念及理论
  • AI元人文构想的新启发:从自动驾驶困境到通用价值智能的构建——声明Ai研究
  • mido配置 DNS 服务器
  • 磁盘调度算法
  • 牛客周赛 Round 112