Python实现网站注册验证码生成类

发布时间 - 2026-01-11 01:47:44    点击率:

本文实例为大家分享了Python网站注册验证码生成类的具体代码,供大家参考,具体内容如下

# -*- coding:utf-8 -*-
'''
Created on 2017年4月7日

@author: Water
'''
import os
import random
import string
import sys
import math
from PIL import Image,ImageDraw,ImageFont,ImageFilter
from django.conf import settings

 
#字体的位置,不同版本的系统会有不同
font_path = os.path.join('/home/workspace/aofeiKart/static', 'fonts/monaco.ttf')#settings.STATIC_ROOT, 'fonts/MONACO.TTF')
font_path = os.path.join(settings.STATIC_ROOT, 'fonts/monaco.ttf')
# print font_path
#生成几位数的验证码
number = 4
#生成验证码图片的高度和宽度
size = (100,30)
#背景颜色,默认为白色
bgcolor = (255,255,255)
#字体颜色,默认为蓝色
fontcolor = (0,0,255)
#干扰线颜色。默认为红色
linecolor = (255,0,0)
#是否要加入干扰线
draw_line = True
#加入干扰线条数的上下限
line_number = (1,5)
 
#用来随机生成一个字符串
# source = list(string.ascii_lowercase+'1234567890')
source = list('1234567890')
def gene_text():
#   return '6666'
  return ''.join(random.sample(source,number))#number是生成验证码的位数
#用来绘制干扰线
def gene_line(draw,width,height):
  begin = (random.randint(0, width), random.randint(0, height))
  end = (random.randint(0, width), random.randint(0, height))
  draw.line([begin, end], fill = linecolor)
 
#生成验证码
def gene_code():
  width,height = size #宽和高
  image = Image.new('RGBA',(width,height),bgcolor) #创建图片
  font = ImageFont.truetype(font_path,25) #验证码的字体
  draw = ImageDraw.Draw(image) #创建画笔
  text = gene_text() #生成字符串
  font_width, font_height = font.getsize(text)
  draw.text(((width - font_width) / number, (height - font_height)/number),text,
      font= font,fill=fontcolor) #填充字符串
  if draw_line:
    gene_line(draw,width,height)
  image = image.transform((width+20,height+10), Image.AFFINE, (1,-0.3,0,-0.1,1,0), Image.BILINEAR) #创建扭曲
  image = image.filter(ImageFilter.EDGE_ENHANCE_MORE) #滤镜,边界加强
  image_file = text+'.png'
  
  image_path = os.path.join(settings.STATIC_ROOT, 'images/%s'%image_file)

  image.save(image_path) #保存验证码图片
  
  return 'http://login.chaozu.net:8000/static/images/%s'%image_file, text

if __name__ == "__main__":
  print gene_code()

实现过程很简单,主要注意有2点:

1.安装PIL库,设置好字体保存目录

2.如果直接返回图片的二进制数据流的話,如下:

buf = io.BytesIO() #io.BytesIO() #io.StringIO() use it to fill str obj
image.save(buf, 'png')
request.session['captcha'] = text.lower() 

return HttpResponse(buf.getvalue(), 'image/png') # return the image data stream as image/jpeg format, browser will treat it as an image

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Python网站注册验证码  # Python验证码生成类  # Python网站注册验证  # Python生成随机验证码的两种方法  # Python随机生成一个6位的验证码代码分享  # Python 随机生成中文验证码的实例代码  # python生成验证码图片代码分享  # python使用pil生成图片验证码的方法  # python PIL模块与随机生成中文验证码  # python3 pillow生成简单验证码图片的示例  # Python random模块(获取随机数)常用方法和使用例子  # Python中random模块生成随机数详解  # python的random模块及加权随机算法的python实现方法  # Python随机数用法实例详解【基于random模块】  # Python实现简单生成验证码功能【基于random模块】  # 验证码  # 默认为  # 滤镜  # 会有  # 很简单  # 大家分享  # 具体内容  # 大家多多  # STATIC_ROOT  # ttf  # monaco 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  如何快速搭建高效WAP手机网站吸引移动用户?  详解Android中Activity的四大启动模式实验简述  Laravel怎么实现模型属性的自动加密  Python结构化数据采集_字段抽取解析【教程】  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  Laravel如何使用Service Container和依赖注入?(代码示例)  开心动漫网站制作软件下载,十分开心动画为何停播?  如何在宝塔面板中创建新站点?  Laravel怎么为数据库表字段添加索引以优化查询  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  Android使用GridView实现日历的简单功能  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  如何快速登录WAP自助建站平台?  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  Laravel如何记录自定义日志?(Log频道配置)  Android自定义控件实现温度旋转按钮效果  Android滚轮选择时间控件使用详解  JavaScript Ajax实现异步通信  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  b2c电商网站制作流程,b2c水平综合的电商平台?  Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】  如何用低价快速搭建高质量网站?  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  Mybatis 中的insertOrUpdate操作  Laravel如何构建RESTful API_Laravel标准化API接口开发指南  如何快速搭建支持数据库操作的智能建站平台?  如何用好域名打造高点击率的自主建站?  Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门  如何注册花生壳免费域名并搭建个人网站?  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  高性能网站服务器配置指南:安全稳定与高效建站核心方案  Python文件流缓冲机制_IO性能解析【教程】  laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法  深入理解Android中的xmlns:tools属性  青岛网站建设如何选择本地服务器?  佛山网站制作系统,佛山企业变更地址网上办理步骤?  高防服务器如何保障网站安全无虞?  如何在新浪SAE免费搭建个人博客?  网站建设整体流程解析,建站其实很容易!  Swift中swift中的switch 语句  Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  免费视频制作网站,更新又快又好的免费电影网站?  Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  网站优化排名时,需要考虑哪些问题呢?  Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  如何用y主机助手快速搭建网站?