利用 PIL模块实现生成动态验证码

简单说下需求:

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

模块: PIL  io

前端页面:

<img src="/get_code/"  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_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 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_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

时间: 2024-08-04 19:48:51

利用 PIL模块实现生成动态验证码的相关文章

Python PIL模块随机生成中文验证码

PIL是Python Imaging Library的简称,PIL是一个Python处理图片的库,提供了一系列模块和方法,比如:裁切,平移,旋转,改变尺寸等等.已经是Python平台事实上的图像处理标准库了.PIL功能非常强大,但API却非常简单易用. PIL有如下几个模块:Image模块.ImageChops模块.ImageCrackCode模块.ImageDraw模块.ImageEnhance模块.ImageFile模块.ImageFileIO模块.ImageFilter模块.ImageFo

python模块之PIL模块(生成随机验证码图片)

PIL简介 什么是PIL PIL:是Python Image Library的缩写,图像处理的模块.主要的类包括Image,ImageFont,ImageDraw,ImageFilter PIL的导入 首先需要安装一下pillow包 pip install pillow 然后就可以调用PIL里的类了 from PIL import Image from PIL import ImageFont from PIL import ImageDraw from PIL import ImageFilt

Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句

最近在使用Hibernate4中,发现两个很有奥秘的注解 @DynamicInsert 和 @DynamicUpdate 如果是在配置文件的话那就是dynamic -insert 和 dynamic-update 这两个注解在一定程度上可以增加与数据库操作相关的速度,可以节省SQL语句的执行时间,提高程序的运行效率. 使用这两个注解只需要在实体类上加入即可,或者在*.hbm.xml配置.这两个注解是boolean值,true或者false. 1.首先使用false来看一下执行的结果,我们就拿更新

php生成动态验证码

<?php /** *ImageCode 生成包含验证码的GIF图片的函数 *@param $string 字符串 *@param $width 宽度 *@param $height 高度 **/ function ImageCode($string='',$width=75,$height=25){ $authstr=$string?$string:((time()%2==0)?mt_rand(1000,9999):mt_rand(10000,99999)); $board_width=$wi

利用Servlet生成动态验证码

先创建一个Servlet import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.awt.*; import java.awt.i

生成动态验证码

php代码 <?php header('Content-Type:image/png');//设置content-type为png图片 header('Cache-Control:no-cache');//设置为不能缓存 //设置验证码的宽高 $w = 120; $h = 40; //要在服务器内存中创建一个图片 $img = imagecreate($w,$h); //为图片分配一个背景颜色,RGB(255,255,255) //2,3,4参数代表RGB,之所以分配180和240,是为了生成一

Servlet动态验证码的生成-带数字和字母

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 一.实现的思路: (1)首先,需要创建一个Servlet.该Servlet通过字节型响应给客户端返回一个图片,该图片是通过JDK中Java 2D的类库来生成一个图片.图片的生成是依靠一个随机数来完成,然后将这个随机数写成图片格式.最后在Session将这个随机的字符串的状态保持住,以便在用户填写后进行对比. (2)其次,在需要加入验证码的JSP页面中,通过<img src="生成验证码

Servlet仿CSDN动态验证码的生成-带数字和字母

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 一.实现的思路: (1)首先,须要创建一个Servlet.该Servlet通过字节型响应给client返回一个图片.该图片是通过JDK中Java 2D的类库来生成一个图片. 图片的生成是依靠一个随机数来完毕,然后将这个随机数写成图片格式.最后在Session将这个随机的字符串的状态保持住,以便在用户填写后进行对照. (2)其次,在须要加入验证码的JSP页面中,通过<img src="生

iOS 生成本地验证码

在应用程序注册.登陆或者有关支付确认的界面,经常会用到验证码,验证码有的是通过手机发送获取的,有的是在本地点击获取的,通过手机发送获取的动态验证码可以使用第三方类库实现,本地点击获取的是在本地自己绘制的,下面我们来详细讲解一下本地生成动态验证码的过程. 导入CoreGraphics.framework 验证码封装了一个UIView,在使用的时候直接把这个View加到界面上使用 CaptchaView.h #import <UIKit/UIKit.h> @interface CaptchaVie