zoukankan      html  css  js  c++  java
  • 利用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()
    })



  • 相关阅读:
    lamada基本语法
    idea 的全局搜索始终是上次的文本
    虚拟机中en33没有IP解决方法
    IDEA设置
    mysql主从配置
    linux安装mysql5.7(rpm方式)
    Jenkins+maven+github自动部署项目
    linux安装Jenkins
    linux wget安装jdk
    关于spring框架JdbcTemplate中的命令模式
  • 原文地址:https://www.cnblogs.com/yang220/p/10752853.html
Copyright © 2011-2022 走看看