共计 2677 个字符,预计需要花费 7 分钟才能阅读完成。
当初验证码的品种真的是越来越多,短信验证码、语音验证码、图片验证码、滑块验证码 … 咱们在 PC 的网页端或者手机上的 app 进行登录或者注册时,应该总会遇见图片验证码,比方上面这类:
下面这些图片验证码都是通过 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.digits | |
chr_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,string | |
chr_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 呀,第二种办法生成的图片验证码应该是与咱们平时接触的最类似,第三种办法虽说操作最为简略,然而生成的图片验证码有那么一点点看不清。也算是比拟乏味的小常识,搭档们能够去本人试一下啦!
关注公众号【奶糖猫】获取更多精彩好文