利用Django生成动态图片验证码

首先,制作随机验证码需要引入随机模块,即random模块,并写出随机颜色函数,具体如下:

import random

def get_random_color():
        return (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))

之后我们引入Python的常用制图模块Pillow,pip install pillow一下,有些情况下某些模块下载后依然无法直接在项目中使用,此时我们需要前往settings(快捷键Ctrl+Alt+S)中手动添加Pillow模块至当前项目即可,

引入io模块,避免磁盘参与WEB工作,保证网页速度,

随机验证码用ASCII码生成即可,

def get_valid_code_img(request):

    from PIL import Image, ImageDraw, ImageFont
    from io import BytesIO
    import random

    img = Image.new("RGB", (270, 40), color=get_random_color())

    draw = ImageDraw.Draw(img)
    kumo_font = ImageFont.truetype("static/font/kumo.ttf", size=32)

    valid_code_str = ""
    for i in range(5):
        random_num = str(random.randint(0, 9))
        random_low_alpha = chr(random.randint(97, 122))
        random_upper_alpha = chr(random.randint(65, 90))
        random_char = random.choice([random_num, random_low_alpha, random_upper_alpha])
        draw.text((i * 50 + 20, 4), random_char, get_random_color(), font=kumo_font)

        # 保存验证码字符串
        valid_code_str += random_char
  print("valid_code_str", valid_code_str)

  request.session["valid_code_str"] = valid_code_str

  f = BytesIO()  img.save(f, "png")  data = f.getvalue()

  return data

为了更贴近生产情况,我们应该添加噪点与噪线,代码如下,插入上方函数中任意处即可,

#噪点与噪线
    width=270
    height=40
    for i in range(5):
        x1=random.randint(0,width)
        x2=random.randint(0,width)
        y1=random.randint(0,height)
        y2=random.randint(0,height)
        draw.line((x1,y1,x2,y2),fill=get_random_color())

    for i in range(90):
        draw.point([random.randint(0, width), random.randint(0, height)], fill=get_random_color())
        x = random.randint(0, width)
        y = random.randint(0, height)
        draw.arc((x, y, x + 4, y + 4), 0, 90, fill=get_random_color())

最后,引入到我们对应的html文件中,大功告成。

效果图直接放出,

原文地址:https://www.cnblogs.com/91joe/p/12327082.html

时间: 2024-10-09 22:31:01

利用Django生成动态图片验证码的相关文章

学习笔记:利用GDI+生成简单的验证码图片

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 学习笔记:利用GDI+生成简单的验证码图片 1 /// <summary> 2 /// 单击图片时切换图片 3 /// </summary> 4 /// <param name="sender">&

PHP生成GIF动态图片验证码

<?php /** * 调用示例 * */ session_start(); $randCode = ''; //验证码随机 $str="abcdefghjkmnpqrstuvwsyzABCDEFGHJKMNPQRSTUVWSYZ23456789"; for($i=0;$i<4;$i++){ $safe.=substr($str,rand(0,strlen($str)),1); } $_SESSION["imgcode"]=$safe; ImageCod

java实现生成简单图片验证码

原文:java实现生成简单图片验证码 源代码下载地址:http://www.zuidaima.com/share/1550463428840448.htm 项目载图: 该项目要转换为Dynamic web project http://www.zuidaima.com/blog/1618162161323008.htm 另外缺少jar包: http://www.zuidaima.com/jar/search/jstl-1.0.1.htm http://www.zuidaima.com/jar/s

JAVA生成一次性图片验证码

现在很多地方都需要写验证码登录验证,这样的好处是可以减轻服务器的压力等,下面就用java实现一次性登录验证码的书写. 1.验证码生成类: package com.easyteam; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.image.BufferedI

利用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

Flask 生成中文图片验证码

因最近要用到验证码,上网搜了下,发现什么验证码感觉都能被攻破,连最近疯传的变态的12306的验证码居然有人一天就攻破了,所以,综合考虑,还是使用汉字: web框架是Flask,然后使用python的Image库生成中文验证码,后续也可加入数字字母啥的. 代码如下: # -*- coding: utf-8 -*- import sys reload(sys) sys.setdefaultencoding('utf-8') """ __author__="tina&qu

随机生成文字图片验证码

1.随机生成汉字 //传入你要生成汉字的个数 public string GetGB2312String(int count) { var random = new Random(); var bs = new byte[count * 2]; for (var i = 0; i < count; i++) { var c = GetGB2312Char(random); bs[i * 2] = (byte)(c.X + 0xa0); bs[i * 2 + 1] = (byte)(c.Y + 0

node.js利用captchapng模块实现图片验证码

安装captchapng模块 npm install captchapng nodejs中使用 var express = require('express'); var captchapng = require('captchapng'); //验证码 exports.verify= function(req, res, next) { var code = parseInt(Math.random() * 9000 + 1000); req.session.checkcode = code;

js 利用canvas 生成文字图片

// text,需要生成的文字 // font,字体样式 drawLogo: function(text, font) { // 创建画布 let canvas = document.createElement('canvas'); // 绘制文字环境 let context = canvas.getContext('2d'); // 设置字体 context.font = font; // 获取字体宽度 let width = context.measureText(text).width;