pillow 实现验证码实现

阅读: 评论:0

pillow 实现验证码实现

pillow 实现验证码实现

验证码实现和验证逻辑
1, 验证码实现
import random
import string
# Image:一个画布
# ImageDraw:一个画笔
# ImageFont:画笔的字体
from PIL import Image,ImageDraw,ImageFont
# pip install pillow# Captcha验证码
class Captcha(object):# 生成几位数的验证码number = 4# 验证码图片的宽度和高度size = (100,30)# 验证码字体大小fontsize = 25# 加入干扰线的条数line_number = 2# 构建一个验证码源文本SOURCE = list(string.ascii_letters)for index in range(0, 10):SOURCE.append(str(index))#用来绘制干扰线@classmethoddef __gene_line(cls,draw,width,height):begin = (random.randint(0, width), random.randint(0, height))end = (random.randint(0, width), random.randint(0, height))draw.line([begin, end], fill = cls.__gene_random_color(),width=2)# 用来绘制干扰点@classmethoddef __gene_points(cls,draw,point_chance,width,height):chance = min(100, max(0, int(point_chance))) # 大小限制在[0, 100]for w in range(width):for h in range(height):tmp = random.randint(0, 100)if tmp > 100 - chance:draw.point((w, h), fill=cls.__gene_random_color())# 生成随机的颜色@classmethoddef __gene_random_color(cls,start=0,end=255):random.seed()return (random.randint(start,end),random.randint(start,end),random.randint(start,end))# 随机选择一个字体@classmethoddef __gene_random_font(cls):fonts = ['utils/captcha/'+font for font in [&#f',&#f',&#f',]]font = random.choice(fonts)return font# 用来随机生成一个字符串(包括英文和数字)@classmethoddef gene_text(cls, number):# number是生成验证码的位数return ''.join(random.sample(cls.SOURCE, number))#生成验证码@classmethoddef gene_graph_captcha(cls):# 验证码图片的宽和高width,height = cls.size# 创建图片# R:Red(红色)0-255# G:G(绿色)0-255# B:B(蓝色)0-255# A:Alpha(透明度)image = w('RGBA',(width,height),cls.__gene_random_color(0,100))# 验证码的字体font = uetype(cls.__gene_random_font(),cls.fontsize)# 创建画笔draw = ImageDraw.Draw(image)# 生成字符串text = _text(cls.number)# 获取字体的尺寸font_width, font_height = size(text)# 填充字符串(((width - font_width) / 2, (height - font_height) / 2),text,font= font,fill=cls.__gene_random_color(150,255))# 绘制干扰线for x in range(0, cls.line_number):cls.__gene_line(draw, width, height)# 绘制噪点cls.__gene_points(draw, 10, width, height)# with open('captcha.png','wb') as fp:#     image.save(fp)return (text,image)if __name__ == "__main__":cap = Captcha()data = _graph_captcha()print(data)
2, 将生成的图片返回前端
(text,image) = _graph_captcha()
text 存放缓存数据库 某字段设置过期时间每次请求生成新的text, 更新 数据库中 text 字段值
image  二进制文件 可 base64编码进行返回
3, 验证逻辑接口
(1) 验证上传 cppt 验证码字段是否为空
(2) 取出缓冲数据库中 text 值 验证是否相等

本文发布于:2024-01-29 00:16:08,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170645857111333.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:验证码   pillow
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23