博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用 PIL模块实现生成动态验证码
阅读量:4943 次
发布时间:2019-06-11

本文共 2755 字,大约阅读时间需要 9 分钟。

简单说下需求:

当用户点击动态框时,实现实时更换动态库里的数字更换

模块: PIL  io

 

前端页面:

$('#id_img').click(function () {
let old_path = $('#id_img').attr('src'); $(this).attr('src', old_path += '?') });
 路由层:
url(r'^get_code/',views.get_code) 视图层
# PIl模块可以实现动态生成图像from PIL import Image, ImageDraw, ImageFont, ImageFilter#Image 生成图片#ImageDraw 在图片上写字#ImageFont  控制字体样式from io import BytesIO  #保存数据,并且在取的时候会以字节的形式返回,,StringIo 字符串形式返回#图片颜色动态变化,图片存放不依赖与文件的形式def get_code(request):    # img_obj = Image.new('RGB',(260,35),get_random())    # #生成一个BytesIo对象    # io_obj = BytesIO()  #将这个对象看成文件句柄    # img_obj.save(io_obj,'png')  # 将图片数据存入内存管理器中  需要指定图片格式    # return HttpResponse(io_obj.getvalue())  # 将保存的数据以二进制的数据返回出来    img_obj = Image.new('RGB',(260,35),get_random())    #生成一个画笔对象    img_draw = ImageDraw.Draw(img_obj)  #拿着画笔就可以在图片上为所欲为    #生成字体样式    img_font = ImageFont.truetype('static/font/11.ttf',30)  #30为字体大小    #随即验证码  数字+大小写字母    code = ''  #定义一个变量存储验证码    for i in range(5):        random_int = str(random.randint(0,9))        random_lower = chr(random.randint(97,122))        random_upper = chr(random.randint(65,90))        temp_code = random.choice([random_int,random_lower,random_upper])   # 在生成的当个验证码中随即一个        #将产生的字一个一个的写在图片上        img_draw.text((60+i*30, 0),temp_code,get_random(),img_font)   # code 记录        code += temp_code    print(code)    #考虑到需要比对验证码,选择将code存放到session表里    request.session['code'] = code    #生成io对象    io_obj = BytesIO()    #可以将字体 改的模糊一些  可选项    img_obj = img_obj.filter(ImageFilter.BLUR)    img_obj.save(io_obj,'png')    return HttpResponse(io_obj.getvalue()) #生成颜色构成三原色数字import randomdef get_random():    return random.randint(0,255),random.randint(0,255),random.randint(0,255)

  

整理版:
def get_random():    return random.randint(0,255),random.randint(0,255),random.randint(0,255)def get_code(request):    img_obj = Image.new('RGB',(260,35),get_random())  # 生成图像对象    img_draw = ImageDraw.Draw(img_obj)  # 生成画笔对象    img_font = ImageFont.truetype('static/font/1.ttf',30)  #生成字体对象    code = ''        #用来保存生成的随机码     for i in range(6):        random_int = str(random.randint(0,9))        random_lower = chr(random.randint(97,122))        random_upper = chr(random.randint(65,90))        temp_code = random.choice([random_int,random_lower,random_upper])        code += temp_code        img_draw.text((60+i*30,0),temp_code,get_random(),img_font)  # 指定xy,数据,颜色的样式,字体样式    # print(code)    request.session['code'] = code  # 作为session保存,用来验证前端传过来的随机码    io_obj = BytesIO()  # 保存数据做准备,生成一个io对象,并且在取的时候会以字节的形式返回    img_obj = img_obj.filter(ImageFilter.BLUR)    # 将字体改的模糊一些    img_obj.save(io_obj,'png')        # 保存数据,需要指定图片格式    return HttpResponse(io_obj.getvalue())   # 固定格式,取值返回给前端页面

  

 

转载于:https://www.cnblogs.com/changwenjun-666/p/11061355.html

你可能感兴趣的文章
转:哈夫曼树详解
查看>>
.Net Core Identity外面使用Cookie中间件
查看>>
C#中泛型之Dictionary
查看>>
Codeforces Round #376 (Div. 2)
查看>>
Codeforces 607D Power Tree 线段树 (看题解)
查看>>
写在人生的路上——2016年上半年总结
查看>>
C语言、C语言的起源以及类似C语言的编程语言的历史简直不要太漫长,我简单总结列表如下:...
查看>>
sp1.3-1.4 Neural Networks and Deep Learning
查看>>
SQL 将一个表中的所有记录插入到一个临时表中
查看>>
nmea协议
查看>>
js 中对象的特性
查看>>
hdoj3714【三分】
查看>>
嵌入式开发入门(4)—驱动入门之时序图分析【20121211修改,未完】
查看>>
Python 使用字符串
查看>>
Quartz Core之CALayer
查看>>
java:一个项目的开发过程(转)
查看>>
操作系统下载路径
查看>>
网站开发 关于图片压缩 以及图片使用
查看>>
hive的count(distinct id)测试--慎用
查看>>
第九周周总结
查看>>