现在验证码的种类真的是越来越多,短信验证码、语音验证码、图片验证码、滑块验证码 ... 我们在 PC 的网页端或者手机上的 app 进行登录或者注册时,应该总会遇见图片验证码,比如下面这类:

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:101677771

上面这些图片验证码都是通过Python制作出来的,方法有很多,但主要都是依赖Python强大的第三方库,下面就介绍一下制作图片验证码的三种方法,难度由高到低。

Pillow库

Pillow是一个非常强大的图片处理模块,其中Image是Pillow中最为重要的类,实现了Pillow中大部分的功能,这个类的主要用来表示图片对象。生成图片验证码需要下面这四个类:

  • 1、Image:含有图片对象主体上的一些应用

  • 2、ImageDraw:画笔,用来向图片上添加验证码

  • 3、ImageFont:设置验证码的字体形式

  • 4、ImageFilter:对图片验证码进行模糊处理

先贴上生成验证码的代码:

from PIL import Image,ImageDraw,ImageFont,ImageFilter
import random,string
#获取随机4个字符组合
def getRandomChar():chr_all = string.ascii_letters+string.digitschr_4 = ''.join(random.sample(chr_all,4))return chr_4
#获取随机颜色
def getRandomColor(low,high):return (random.randint(low,high),random.randint(low,high),random.randint(low,high))
#制作验证码图片
def getPicture():width,height = 180,60#创建空白画布image = Image.new('RGB',(width,height),getRandomColor(20,100))#验证码的字体font = ImageFont.truetype('C:/Windows/fonts/stxinwei.ttf',40)#创建画笔draw = ImageDraw.Draw(image)#获取验证码char_4 = getRandomChar()#向画布上填写验证码for i in range(4):draw.text((40*i+10,0),char_4[i],font = font,fill=getRandomColor(100,200))#绘制干扰点for x in range(random.randint(200,600)):x = random.randint(1,width-1)y = random.randint(1,height-1)draw.point((x,y),fill=getRandomColor(50,150))#模糊处理image = image.filter(ImageFilter.BLUR)image.save('./%s.jpg' % char_4)

我们都知道图片验证码一般都是以一张图片为底,有不同的背景颜色,然后上面印有4个不同的字符,可能是数字、可能是字母、 也可能是这两种的组合,并且这些字符看起来不会很清晰。

上面代码中的三个函数就分别实现生成图片验证码的某个需求,首先 getRandomChar 函数就用来生成4个随机字符的组合,其中 chr_all 包含了大写字母、小写字母和数字:

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789

random.sample 方法就是在这些字符的组合中随机挑出若干个(这里我们选的是4个)生成一个新的列表。

getRandomColor 函数则是用来设置RGB三个阈值,RGB是一种最常用的颜色系统,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,每个通道的阈值都在[0,255]之间。

getPicture 函数用来制作图片验证码,具体代码作用都有注释,这里建议字体的颜色与背景颜色的阈值不要重叠,容易出现某个字符可见度很低的情况,这种方式生成的图片验证码是这种形式的:

captcha库

如果你像我一样好奇这个库的中文意思可以有道一下,你会发现它的中文含义就是验证码,也就是说这个库可能就是用来专门制作验证码的:

你可以先利用清华镜像安装captcha库:

pip install captcha -i https://pypi.tuna.tsinghua.edu.cn/simple

利用captcha库生成图片验证码的代码:

from captcha.image import ImageCaptcha
import random,stringchr_all = string.ascii_letters + string.digits
chr_4 = ''.join(random.sample(chr_all, 4))
image = ImageCaptcha().generate_image(chr_4)
image.save('./%s.jpg' % chr_4)

可以看到我们需要的操作就是将随机生成的4个字符组合传入 ImageCaptcha 类下的 generate_image 方法中,然后他就会自动生成一个图片验证码,形式如下:

gvcode库

最后一种方法是最简单的,简单到仅需要3行代码就可以实现上面的操作,首先我们也需要安装这个库,注意利用pip安装时要用下面名字:

pip install graphic-verification-code -i https://pypi.tuna.tsinghua.edu.cn/simple

然后贴上生成图片验证码的代码:

import gvcode
s,v = gvcode.generate()
s.save('./%s.jpg' % v)

你没看错~这三行代码就可以生成一张图片验证码,其中还有一行用来导包,也就说有效代码仅两行!

print(type(s))
print(v)
print(type(v))

其中 s 就是最终生成的图片验证码,v 就是图片验证码上的4个字符,也就是字符串类型,打印一下:

最后这种方法生成的图片验证码形式如下:

说在最后

这三种方法生成图片验证码各有利弊,第一种方法虽说复杂,但是可以DIY呀,第二种方法生成的图片验证码应该是与我们平时接触的最相似,第三种方法虽说操作最为简单,但是生成的图片验证码有那么一点点看不清。也算是比较有趣的小知识,伙伴们可以去自己试一下啦!

利用Python只需3行代码即可生成验证码相关推荐

  1. 【高代码文件格式API】道宁为您提供文件格式API集——Aspose,只需几行代码即可创建转换和操作100多种文件格式

    Aspose系列产品是 高代码文件格式API 使您的应用程序能够处理 适用于所有主要平台的 Word.Excel.PDF.PowerPoint.Outlook 和100多种其他文件格式 Aspose提 ...

  2. 只需3行代码自动生成高性能模型,支持4项任务,亚马逊发布开源库AutoGluon

    作者 | KYLE WIGGERS 编译 | AI科技大本营(ID:rgznai100) 构建涉及图像.文本和表格数据集的机器学习应用并不容易.它需要特征工程或使用数据领域知识来创建使AI算法起作用的 ...

  3. Python到底有多强大?只需 15 行代码即可进行人脸检测

    无论你是最近开始探索OpenCV还是已经使用它很长一段时间,在任何一种情况下,您都一定遇到过"人脸检测"这个词.随着机器变得越来越智能,它们模仿人类行为的能力似乎也在增加,而人脸检 ...

  4. 批量下载网页图片,python只需23行代码

    我们在浏览网页的时候偶尔会遇到很多美图,想要保存下来.如果是一张张地"右键,图片另存为...",就显得太low了,而且工作量大.效率低. 我们以豆瓣网首页为例,教大家如何批量获取网 ...

  5. 谷歌浏览器地址转换成二维码的插件,只需几行代码即可实现

    谷歌浏览器插件,是利用javascript进行编写的.具体代码参考在github里面,这是本人简单编写的一个谷歌浏览器地址转换成二维码的插件,里面的代码思路本文暂时不做解析,只是介绍如何使用这个插件. ...

  6. lstm代码_只需5行代码!LSTM时间序列建模以及预测

    最近我在github上看到一个项目,项目内容是将深度学习方法(LSTM.RNN.GRU)进行时间序列建模的过程进行了封装,使得调用者调用者只需5行代码能完成时间序列建模以及预测的全过程. 项目本身是使 ...

  7. 只需5行代码! LSTM时间序列建模以及预测

    最近我在github上看到一个项目,项目内容是将深度学习方法(LSTM.RNN.GRU)进行时间序列建模的过程进行了封装,使得调用者调用者只需5行代码能完成时间序列建模以及预测的全过程. 项目本身是使 ...

  8. JavaScript开发区块链只需200行代码

    JavaScript开发区块链只需200行代码 用JavaScript开发实现一个简单区块链.通过这一开发过程,你将理解区块链技术是什么:区块链就是一个分布式数据库,存储结构是一个不断增长的链表,链表 ...

  9. hash签名 java_java开发区块链只需150行代码

    原标题:java开发区块链只需150行代码 本文帮助你理解什么是区块链.将通过java开发区块链的实战学习方式,用 Java创建开发一个基本的区块链,实现简单的工作量证明系统.Java开发区块链的源代 ...

最新文章

  1. 30、Arrays工具类
  2. torch多维取数据
  3. ML之MLiR:输入两个向量,得出两个向量之间的相关度
  4. ROS学习之roslaunch的node标签
  5. SAP Analytics Cloud里的Smart Predict
  6. Halcon自定义函数封装方法(全网最详细)
  7. java之写接口回调编程经验改进
  8. 第十篇:Spring Boot整合mybatis+Mysql 入门试炼02
  9. Vue性能优化:图片与组件,如何实现按需加载?
  10. 在Linux操作系统下修改IP、DNS和路由配置
  11. The following IP can be used to access Google website
  12. 轻松玩转windows7之一:利用无线玩转虚拟网络
  13. 【C】VC6调试器的使用
  14. linux发行版本中 图形方式的运行级,在大多数 Linux 发行版本中,图形方式的运行级定义为?...
  15. 第一章 批判性思维概念
  16. (转载)SpringBoot配置Druid数据源监控服务Yml格式
  17. python中整数类型取值范围有没有限制_python 数据库取值范围内
  18. KiCad 5.1.6 泪滴插件安装与使用
  19. 全球高分辨率(10m和30m)土地覆盖数据分享
  20. 一篇文章贯通wpf的本质(W我P佩F服)

热门文章

  1. linux-基本权限UGO-读写执行权限
  2. jquery-通过按钮控制模态的显示与隐藏
  3. PHP设计模式之建造者模式
  4. keepalived实现应用高可用
  5. 普惠金融在印尼:GoPay会是东南亚的蚂蚁金服吗?
  6. ACM团队周赛题解(2)
  7. java 把文件转化为字节数组
  8. 在团800运维工作总结之couchbase使用
  9. qsort函数使用手册
  10. Web前端 HTML 优化启动性能