利用PIL创建验证码
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()
})
利用PIL创建验证码的更多相关文章
- Python利用PIL生成随机验证码图片
安装pillow: pip install pillow PIL中的Image等模块提供了创建图片,制作图片的功能,大致的步骤就是我们利用random生成6个随机字符串,然后利用PIL将字符串绘制城图 ...
- 利用PIL库创建空白图像
背景 最近,想自己生成带位置坐标的文字数据集来训练文本位置探测网络. 理想情况是,给文字加盐噪声,背景不需要加噪声,所以需要创建一个空白的背景.将文字放在空白背景上,然后利用opencv加噪声. 解决 ...
- 基于PIL模块创建验证码图片
def get_valid_img(request): # 方式2:基于PIL模块创建验证码图片 from PIL import Image, ImageDraw, ImageFont from io ...
- 利用pil库处理图像
1关于PIL PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了. 2PIL的主要功 ...
- Oracle Sales Cloud:管理沙盒(定制化)小细节1——利用公式创建字段并显示在前端页面
Oracle Sales Cloud(Oracle 销售云)是一套基于Oracle云端的CRM管理系统.由于 Oracle 销售云是基于 Oracle 云环境的,它与传统的管理系统相比,显著特点之一便 ...
- 利用Oracle创建表空间和用户
本文仅用于学习交流,商业用途请支持正版!转载请注明:http://www.cnblogs.com/mxbs/p/6217152.html 第一步,创建表空间 以SYS/sys账户和SYSDBA身份登录 ...
- 利用Oracle创建数据库
本文仅用于学习交流,商业用途请支持正版!转载请注明:http://www.cnblogs.com/mxbs/p/6217151.html 数据库的创建 打开"所有程序"-" ...
- 利用navicat创建存储过程、触发器和使用游标的简单实例
利用navicat创建存储过程.触发器和使用游标的简单实例 标签: navicat存储过程触发器mysql游标 2013-08-03 21:34 15516人阅读 评论(1) 收藏 举报 分类: 数 ...
- java中利用JFrame创建窗体 【转】
1. 一个简单的swing public class Test(){ public static void main(String[] args){ JFrame frame = new JFrame ...
随机推荐
- 精读《C++ primer》学习笔记(第四至六章)
第四章: 重要知识点: 4.1 基础 函数调用是一种特殊的运算符,它对运算对象的数量没有限制. 重载运算符时可以定义运算对象的类型,返回值类型,但运算对象的个数,运算符的优先级,结合律无法改变. 当一 ...
- Elasticsearch -- 索引管理
1.#获取当前索引 # curl -u elastic:changeme 'localhost:9200/_cat/indices?v' 2. #删除指定索引 # curl -XDELETE - ...
- list 转成 tree
package com.zl; import java.util.ArrayList; import java.util.List; public class MenuItem { private S ...
- JavaScript 对象属性底层原理
对象属性类型 1. 数据属性 [[Configurable]]:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性,特性默认值为true [[Enum ...
- 存储过程中调用webservice
存储过程中调用webservice其实是在数据库中利用系统函数调用OLE. 1.查找webservice api 可得到MSSOAP.SoapClient. 2.查找API 接口可得到mssoapin ...
- Ubuntu16.04下安装Hyperledger Fabric 1.0.0
系统环境 * Ubuntu: 16.04 * Go: 1.9.2 * NodeJS: v6.12.0 * Docker: 17.09.0-ce * HyperLedger Fabric: 1.0.0 ...
- mybatis-plus的代码生成器
简介:构建自定义mybatis-plus模板,自动生成mybatis,entity,mapper,service,controller 项目源码:https://github.com/y369q369 ...
- window注册表相关
参考: https://baike.baidu.com/item/REG_EXPAND_SZ/9102962 一 注册表的相关概念 windows注册表相关api中名字起的比较混乱, 在这放一张从网上 ...
- cesium 拾取模型表面的坐标
scene = viewer.scene;var handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);handler.setInput ...
- c语言函数参数类似继承的传递
函数的参数如果是一个父结构的指针, 这个结构包含在另一个子结构中, typedef struct test_node_one test_node_one_t; typedef struct test_ ...