#四位数数字字母验证码,显示进行输入判断验证
from PIL import Image, ImageFilter, ImageFont,ImageDraw
import os
import random
import string
import matplotlib.pyplot as plt
# ImageFilter:Python中的图像滤波,主要对图像进行平滑、锐化、边界增强等滤波处理。
#随机选取一个数字字母,含大小写
def get_word():
word = string.ascii_letters+string.digits
return random.choice(word)
#字体像素随机颜色
def font_color():
#random.randint()在范围内取随机数
return(random.randint(32,255),random.randint(23,255),random.randint(32,255))
#背景像素随机颜色
def b_color():
return(random.randint(64,255),random.randint(64,255),random.randint(64,255))
#生成验证码图像,返回一个字符串,表示验证码
def imag(path):
w = 60*4
h = 60
d_word=''
#新建图像对象
img = Image.new('RGB',(w,h),(255,255,255))
#字体对象
font = ImageFont.truetype(r'H:\gay化\汉化\字体\4书法 - 2\FZ宋s刻d本r秀d楷繁.ttf',60)
#类似于画笔
draw = ImageDraw.Draw(img)
for i in range(w):
for j in range(h):
#画背景,用随机颜色填充每个像素
draw.point((i,j),fill=b_color())
for i in range(4):
word=get_word()
#draw.text方法进行字符绘图,()内:绘图位置,字符,字体,颜色
draw.text((i*60+10,5),word,font=font,fill=font_color())
#单个验证码相加
d_word = d_word + word
#保存验证码图像
img.save(path,'jpeg')
#返回验证码
return d_word
#一个输入函数,调用时返回输入内容
def get_input():
return str(input('请输入验证码:\n'))
#运行
if __name__ == "__main__":
path = ('test.jpg')
str_=imag(path)
test_img=Image.open(path)
plt.figure('test')
plt.imshow(test_img)
plt.show()
#四次机会
for i in range(4):
if str.lower(str_) == str.lower(get_input()):
print('验证成功')
break
else:
if i == 3:
print('错误次数已用完!')
else:
print('错误!还有%d次机会'%(3-i))
#结束后删除验证码图像
os.remove(path)