热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python使用Pillow包生成验证码图片的方法

本文介绍了使用Python中的Pillow包生成验证码图片的方法。通过随机生成数字和符号,并添加干扰象素,生成一幅验证码图片。需要配置好Python环境,并安装Pillow库。代码实现包括导入Pillow包和随机模块,定义随机生成字母、数字和字体颜色的函数。

用pillow包随机生成验证码

引入

基本上大家使用每一种网络服务都会遇到验证码,一般是网站为了防止恶意注册、发帖而设置的验证手段。其生成原理是将一串随机产生的数字或符号,生成一幅图片,图片里加上一些干扰象素(防止OCR)。下面就详细讲解如何生成验证码

所需环境

除了配置好的python环境外,还需要配有python中的PIL库,这是python中专门用来处理图片的库。用传统的pip install pillow方法下载 如图所示:
打开cmd注释:看上图最后一行出现‘successfuly’表示安装成功,如果想删除此包的话可以用此命令删除:pip uninstall pillow(不建议删除)

pillow包随机生成验证码

代码实现:

#导入pillow包引入import后面的那四个模块
from PIL import Image,ImageDraw,ImageFont,ImageFilter
#引入随机模块
import random
#随机字母
def random_char():
return chr(random.randint(65,90))
#随机数字
def random_num():
return random.randint(0,9)
#随机字体颜色
def random_color():
return (random.randint(15, 225), random.randint(15, 225), random.randint(15, 225))
#随机背景颜色
def random_color2():
return(random.randint(30,120),random.randint(30,120),random.randint(30,120))
# 生成空白背景图层
image=Image.new('RGB',size=(240,60),color=(255,255,255))
#生成绘制对象
draw=ImageDraw.Draw(image)
# 字体对象,字体,字号
font=ImageFont.truetype('arial.ttf',36)
#循环像素点并填充颜色
for x in range(0,241):
for y in range(0,61):
draw.point(xy=(x,y),fill=(255,255,255))
# 生成文字
for t in range(0,4):
draw.text((60*t+20,10), random_char(), font=font, fill=random_color())
# 加模糊滤镜
# image=image.filter(ImageFilter.BLUR)
point_chance=10
chance = min(100, max(0, int(point_chance))) # 大小限制在[0, 100]
"""绘制干扰点"""
for w in range(x):
for h in range(y):
tmp = random.randint(0, 100)
if tmp > 100 - chance:
draw.point((w, h), fill=(0, 0, 0))

#保存
image.save('demo4.jpg','jpeg')

推荐阅读
  • 利用Java与Tesseract-OCR实现数字识别
    本文深入探讨了如何利用Java语言结合Tesseract-OCR技术来实现图像中的数字识别功能,旨在为开发者提供详细的指导和实践案例。 ... [详细]
  • 本文介绍了如何利用Python进行批量图片尺寸调整,包括放大和等比例缩放。文中提供了详细的代码示例,并解释了每个步骤的具体实现方法。 ... [详细]
  • 京东AI创新之路:周伯文解析京东AI战略的独特之处
    2018年4月15日,京东在北京举办了人工智能创新峰会,会上首次公开了京东AI的整体布局和发展方向。此次峰会不仅展示了京东在AI领域的最新成果,还标志着京东AI团队的首次集体亮相。本文将深入探讨京东AI的发展策略及其与BAT等公司的不同之处。 ... [详细]
  • 每日一练—0010题:Python生成字母验证码图像
    本题挑战:利用Python编程语言,结合PIL库,创建包含随机字母和数字的验证码图像。 ... [详细]
  • django项目中使用手机号登录
    本文使用聚合数据的短信接口,需要先获取到申请接口的appkey和模板id项目目录下创建ubtils文件夹,定义返回随机验证码和调取短信接口的函数function.py文件se ... [详细]
  • 本文详细探讨了JavaScript中的作用域链和闭包机制,解释了它们的工作原理及其在实际编程中的应用。通过具体的代码示例,帮助读者更好地理解和掌握这些概念。 ... [详细]
  • Python 内存管理机制详解
    本文深入探讨了Python的内存管理机制,涵盖了垃圾回收、引用计数和内存池机制。通过具体示例和专业解释,帮助读者理解Python如何高效地管理和释放内存资源。 ... [详细]
  • 解决TensorFlow CPU版本安装中的依赖问题
    本文记录了在安装CPU版本的TensorFlow过程中遇到的依赖问题及解决方案,特别是numpy版本不匹配和动态链接库(DLL)错误。通过详细的步骤说明和专业建议,帮助读者顺利安装并使用TensorFlow。 ... [详细]
  • 基于Spring Boot的家政服务平台毕业设计项目(含源代码)
    本文档介绍了如何搭建和运行一个基于Spring Boot的家政服务平台,旨在为计算机专业学生提供毕业设计参考。项目涵盖了从环境配置到核心功能实现的全过程。 ... [详细]
  • FFPlay 字幕与LRC歌词播放指南
    本文详细介绍了不同媒体容器支持的字幕格式,以及如何使用FFPlay和FFMPEG进行字幕和LRC歌词的播放与转换。涵盖的内容包括字幕显示方法、字体配置、字幕流选择等。 ... [详细]
  • Redis Key管理:常用命令与命名最佳实践
    本文介绍了Redis中用于管理key的多个重要命令,包括查询、修改和删除等操作,并提供了关于key命名的最佳实践建议。 ... [详细]
  • 本文探讨了C#中所有内置数据类型如何通过默认构造函数初始化,并提供了一个示例方法来展示这些类型的默认值。 ... [详细]
  • 这个报错出现在userDao里面,sessionfactory没有注入。解决办法:spring整合Hibernate使用test测试时要把spring.xml和spring-hib ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • 优化网页加载速度:JavaScript 实现图片延迟加载
    本文介绍如何使用 JavaScript 实现图片延迟加载,从而显著提升网页的加载速度和用户体验。 ... [详细]
author-avatar
林淑芬若纯嘉友
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有