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


Posted in Python onJune 08, 2017

本文实例为大家分享了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 thread 并发且顺序运行示例
Apr 09 Python
python 示例分享---逻辑推理编程解决八皇后
Jul 20 Python
Python实现的概率分布运算操作示例
Aug 14 Python
python使用tcp实现局域网内文件传输
Mar 20 Python
pygame游戏之旅 游戏中添加显示文字
Nov 20 Python
python实现函数极小值
Jul 10 Python
详解Python 字符串相似性的几种度量方法
Aug 29 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
Feb 26 Python
解决pycharm下pyuic工具使用的问题
Apr 08 Python
Tensorflow卷积实现原理+手写python代码实现卷积教程
May 22 Python
python语音识别指南终极版(有这一篇足矣)
Sep 09 Python
浅析Python打包时包含静态文件处理方法
Jan 15 Python
Python实现多线程抓取网页功能实例详解
Jun 08 #Python
Python中with及contextlib的用法详解
Jun 08 #Python
Python使用pylab库实现画线功能的方法详解
Jun 08 #Python
Python实现对象转换为xml的方法示例
Jun 08 #Python
Python实现的手机号归属地相关信息查询功能示例
Jun 08 #Python
python用pickle模块实现“增删改查”的简易功能
Jun 07 #Python
Python3 socket同步通信简单示例
Jun 07 #Python
You might like
mysql 全文搜索 技巧
2007/04/27 PHP
php中global和$GLOBALS[]的分析之一
2012/02/02 PHP
PHP判断字符串长度的两种方法很实用
2015/09/22 PHP
javascript 用原型继承来实现对象系统
2010/03/22 Javascript
javascript中方便增删改cookie的一个类
2012/10/11 Javascript
利用js实现在浏览器状态栏显示访问者在本页停留的时间
2013/12/29 Javascript
在页面上用action传递参数到后台出现乱码的解决方法
2013/12/31 Javascript
实例讲解JavaScript的Backbone.js框架中的View视图
2016/05/05 Javascript
Java框架SSH结合Easyui控件实现省市县三级联动示例解析
2016/06/12 Javascript
jQuery查找节点方法完整实例
2016/09/13 Javascript
JS命令模式例子之菜单程序
2016/10/10 Javascript
详解Javascript中new()到底做了些什么?
2018/03/29 Javascript
angularJS开发注意事项
2018/05/26 Javascript
通过循环优化 JavaScript 程序
2019/06/24 Javascript
微信小程序登录时如何获取input框中的内容
2019/12/04 Javascript
vue项目打包之开发环境和部署环境的实现
2020/04/23 Javascript
图解JS原型和原型链实现原理
2020/09/15 Javascript
Vue 的 v-model用法实例
2020/11/23 Vue.js
python进阶教程之词典、字典、dict
2014/08/29 Python
详解Python里使用正则表达式的ASCII模式
2017/11/02 Python
利用nohup来开启python文件的方法
2019/01/14 Python
python版DDOS攻击脚本
2019/06/12 Python
Python中py文件转换成exe可执行文件的方法
2019/06/14 Python
python判断两个序列的成员是否一样的实例代码
2020/03/01 Python
Python爬虫HTPP请求方法有哪些
2020/06/03 Python
python 绘制正态曲线的示例
2020/09/24 Python
Python 实现进度条的六种方式
2021/01/06 Python
详解css3中的伪类before和after常见用法
2020/11/17 HTML / CSS
师范应届生教师求职信
2013/11/05 职场文书
大学专科生推荐信范文
2013/11/23 职场文书
就业自荐书
2013/12/05 职场文书
英语教师求职信
2014/06/16 职场文书
实施意见格式范本
2015/06/05 职场文书
golang 在windows中设置环境变量的操作
2021/04/29 Golang
科学家测试在太空中培育人造肉,用于未来太空旅行
2022/04/29 数码科技
Zabbix对Kafka topic积压数据监控的问题(bug优化)
2022/07/07 Servers