利用PIL创建验证码
2024-08-27 20:12:05
1. 随机生成rgb 元组
def random_RGB(min, max):
return tuple([random.randint(min, max) for i in range(3)])
2.生成4位随机数
def random_fcode():
code = ''
for i in range(4):
tag = random.randint(1, 3) # 1:大写 2:小写 3:数字
if tag == 1:
code += chr(random.randint(65, 90))
elif tag == 2:
code += chr(random.randint(97, 122))
else:
code += str(random.randint(0, 9))
return code
3.利用画板生成验证码
# 创建画板
img = Image.new('RGB',(170,32),random_RGB(150,255)) # 图像模型,大小,颜色 # 在画板中写字
img_draw = ImageDraw.Draw(img) # img 画板 # 设置文字字体
img_font = ImageFont.truetype('static/font/kumo.ttf',size=32) # 下载的字体, 大小
# 获取验证码,并将验证码存储在session中,与会话绑定,便于登录时验证 img_code = random_fcode()
request.session['img_code'] = img_code # 正式画文字:xy轴,文本,颜色,字体
for i,ch in enumerate(img_code): # i为序号,ch为文本内容(验证码内容)
img_draw.text((30+i*30,0),ch,random_RGB(0,150),img_font) bf = BytesIO() # 字节流
img.save(bf, 'png') # 存储方法, 画出来的图片的存储格式
data = bf.getvalue() # 从内存中取出数据 return HttpRessponse(data) 在登录界面 可设计成 点击图片进行验证码的刷新
ajax 为:
$('#codes').click(function () { url = '/login_code/'; {#点击验证码进行更换#}
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'blob';
xhr.onreadystatechange = function () {
if(xhr.readyState == 4){
if(xhr.status == 200){
var blod = this.response;
var src = URL.createObjectURL(blod);
$('#codes').attr('src',src);
}
}
};
xhr.send()
})
最新文章
- Scala - 隐式转换和隐式参数
- CodeForces 165E Compatible Numbers(位运算 + 好题)
- springMVC发送邮件
- 微信app支付,服务端对接
- portable runtime
- Linux下MySQL5.6的修改字符集编码为UTF8
- java 使用 comet4j 主动向客户端推送信息 简单例子
- 我30天在Stack Overflow问答网站上回答问题的感受
- 缓存算法–LRU
- 修改UISearchBar背景色
- Android SQLite之乐学成语项目数据库存储
- new对象数组时的内存布局
- 201521123109 《java程序设计》第13周学习总结
- k8s 创建资源的两种方式 - 每天5分钟玩转 Docker 容器技术(124)
- 使用sql语句比较excel中数据的不同
- Halcon中模板匹配方法的总结归纳
- NoHttp封装--03 cookie
- 利用MSF的MS08_067模块攻击windows server 2003 SP2中文版系统
- DrawPrimitivesTest
- CodeForces 604A(浮点数)