利用 PIL模块实现生成动态验证码
简单说下需求:
当用户点击动态框时,实现实时更换动态库里的数字更换
模块: PIL io
前端页面:
<img src="/get_code/" alt="" id="id_img" width="260" height="35">
<script>
$('#id_img').click(function () { let old_path = $('#id_img').attr('src'); $(this).attr('src', old_path += '?')});
</script> 路由层:
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_codeprint(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 random
def 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_codeimg_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
利用 PIL模块实现生成动态验证码相关推荐
- phpgif图片包_php生成动态验证码gif图片
这是一个通过php生成的动态验证码图片的示例,重点是可以运行哦!下面先发下效果图: 下面是php生成动态验证码需要用到的相关类和函数. /** *ImageCode 生成包含验证码的GIF图片的函数 ...
- .NET中生成动态验证码
NET中生成动态验证码 验证码是图片上写上几个字,然后对这几个字做特殊处理,如扭曲.旋转.修改文字位置,然后加入一些线条,或加入一些特殊效果,使这些在人类能正常识别的同时,机器却很难识别出来,以达到防 ...
- 登陆界面如何生成动态验证码
在设计登录界面时验证码是必不可少,本实例将简单的生成动态验证码. 根据个人需求将生成验证码代码放到不同的的地方,可以放到前段控制器中通过请求方式生成验证码,也可已将代码放到一个JSP页面通过应用JSP ...
- 利用Servlet生成动态验证码
在Servlet中,设置响应正文的类型为image/jpeg,表示响应的是一个图片,然后通过java.awt包中的操作图形图像的类来生成一个图像 java.awt.image.BufferedImag ...
- 生成动态验证码的jsp
直接将验证码的生成工作放到jsp中,就可以直接在页面请求这个jsp,不需要再去设置servlet的的映射路径,简化代码. <%@ page language="java" p ...
- Servlet生成动态验证码
主要代码 public class Abc extends HttpServlet { private static final long serialVersionUID = 1L; public ...
- Django 20购物商城项目(注册、登录页面:生成动态验证码)
dDjango 20购物商城项目 1.安装pillow 2.在注册页面加入验证码 2.1.register.html (增加内容) 2.2.register.js(增加内容) 2.2.路由.视图(增加 ...
- java生成动态验证码_动态生成验证码案例
servlet代码 package cn.guizimo.web.servlet; import javax.imageio.ImageIO; import javax.servlet.Servlet ...
- java生成动态验证码_java动态生成验证码
后台代码:RandomImageServlet.java package com.zhaoran.servlet; import java.awt.Color; import java.awt.Fon ...
最新文章
- 关于Visual Basic 10.0
- pycharm 如何导入、导出设置?
- java date 转换calendar_Java中日期格式(String、Date、Calendar)的相互转换
- 两个有序链表序列的交集 (20分)(最佳解法)
- Java 9:欢迎来到Module World
- 一位女博士五年的艰难毕业历程
- SpringMVC注解@RequestParam全面解析____ 注解@RequestParam如何使用加与不加的区别
- 专访唐宇迪博士:我是如何迈入同济大学校园的?浅谈人工智能,未来数据挖掘和计算机视觉是风口
- java之jsoup爬虫
- 小程序车型品牌车系三级选择(地区也一样)
- 记一次抓包和破解App接口
- 计算机日期函数公式大全,Excel技巧: 根据日期汇总月份的计算公式
- linux运行Windows模拟器,Wine(Windows模拟器)
- linux 上 gcc -m32 编译报错解决方案
- 提速降费再发力 中国联通推出八项惠民便民措施
- 人力资源管理案例-左右为难的经理
- 论文阅读笔记--Aesthetics-Driven Stereoscopic 3-D Image Recomposition With Depth Adaptation-2018
- 【20230215】EndNote20文献管理软件的使用_个人学习总结
- Manjaro无法启动?别急,试试grub 命令加载系统。
- Oracle系统信息查询