简单说下需求:

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

模块: 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模块实现生成动态验证码相关推荐

  1. phpgif图片包_php生成动态验证码gif图片

    这是一个通过php生成的动态验证码图片的示例,重点是可以运行哦!下面先发下效果图: 下面是php生成动态验证码需要用到的相关类和函数. /** *ImageCode 生成包含验证码的GIF图片的函数 ...

  2. .NET中生成动态验证码

    NET中生成动态验证码 验证码是图片上写上几个字,然后对这几个字做特殊处理,如扭曲.旋转.修改文字位置,然后加入一些线条,或加入一些特殊效果,使这些在人类能正常识别的同时,机器却很难识别出来,以达到防 ...

  3. 登陆界面如何生成动态验证码

    在设计登录界面时验证码是必不可少,本实例将简单的生成动态验证码. 根据个人需求将生成验证码代码放到不同的的地方,可以放到前段控制器中通过请求方式生成验证码,也可已将代码放到一个JSP页面通过应用JSP ...

  4. 利用Servlet生成动态验证码

    在Servlet中,设置响应正文的类型为image/jpeg,表示响应的是一个图片,然后通过java.awt包中的操作图形图像的类来生成一个图像 java.awt.image.BufferedImag ...

  5. 生成动态验证码的jsp

    直接将验证码的生成工作放到jsp中,就可以直接在页面请求这个jsp,不需要再去设置servlet的的映射路径,简化代码. <%@ page language="java" p ...

  6. Servlet生成动态验证码

    主要代码 public class Abc extends HttpServlet { private static final long serialVersionUID = 1L; public ...

  7. Django 20购物商城项目(注册、登录页面:生成动态验证码)

    dDjango 20购物商城项目 1.安装pillow 2.在注册页面加入验证码 2.1.register.html (增加内容) 2.2.register.js(增加内容) 2.2.路由.视图(增加 ...

  8. java生成动态验证码_动态生成验证码案例

    servlet代码 package cn.guizimo.web.servlet; import javax.imageio.ImageIO; import javax.servlet.Servlet ...

  9. java生成动态验证码_java动态生成验证码

    后台代码:RandomImageServlet.java package com.zhaoran.servlet; import java.awt.Color; import java.awt.Fon ...

最新文章

  1. 关于Visual Basic 10.0
  2. pycharm 如何导入、导出设置?
  3. java date 转换calendar_Java中日期格式(String、Date、Calendar)的相互转换
  4. 两个有序链表序列的交集 (20分)(最佳解法)
  5. Java 9:欢迎来到Module World
  6. 一位女博士五年的艰难毕业历程
  7. SpringMVC注解@RequestParam全面解析____ 注解@RequestParam如何使用加与不加的区别
  8. 专访唐宇迪博士:我是如何迈入同济大学校园的?浅谈人工智能,未来数据挖掘和计算机视觉是风口
  9. java之jsoup爬虫
  10. 小程序车型品牌车系三级选择(地区也一样)
  11. 记一次抓包和破解App接口
  12. 计算机日期函数公式大全,Excel技巧: 根据日期汇总月份的计算公式
  13. linux运行Windows模拟器,Wine(Windows模拟器)
  14. linux 上 gcc -m32 编译报错解决方案
  15. 提速降费再发力 中国联通推出八项惠民便民措施
  16. 人力资源管理案例-左右为难的经理
  17. 论文阅读笔记--Aesthetics-Driven Stereoscopic 3-D Image Recomposition With Depth Adaptation-2018
  18. 【20230215】EndNote20文献管理软件的使用_个人学习总结
  19. Manjaro无法启动?别急,试试grub 命令加载系统。
  20. Oracle系统信息查询

热门文章

  1. hadoop错误总结
  2. 面试常备题(三)----顺时针打印矩阵
  3. Redis 中两种持久化机制详解
  4. 【恋上数据结构】串匹配算法(蛮力匹配、KMP【重点】、Boyer-Moore、Karp-Rabin、Sunday)
  5. CentOS8 同步时间chrony ntpdate已无法使用
  6. 读书_w3c架构师01通用设计与方法论
  7. 深度好文,如何培养真正的数据分析思维?附实践案例
  8. 不装了,摊牌了,月薪10571元的我是新生代农民工中的一员
  9. 50套可视化报表模板直接用,做报告不用愁了!快收藏
  10. 学Python就能做好数据分析?万能语言背后是一片韭菜地