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 + openpyxl处理excel2007文档思路以及心得
Jul 14 Python
Python中使用语句导入模块或包的机制研究
Mar 30 Python
tensorflow实现简单的卷积网络
May 24 Python
利用Django-environ如何区分不同环境
Aug 26 Python
python+numpy+matplotalib实现梯度下降法
Aug 31 Python
python判断数字是否是超级素数幂
Sep 27 Python
Python后台开发Django的教程详解(启动)
Apr 08 Python
numpy和pandas中数组的合并、拉直和重塑实例
Jun 28 Python
python 基于dlib库的人脸检测的实现
Nov 08 Python
Python算法的时间复杂度和空间复杂度(实例解析)
Nov 19 Python
python实现人脸签到系统
Apr 13 Python
使用tensorflow进行音乐类型的分类
Aug 14 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
一个ORACLE分页程序,挺实用的.
2006/10/09 PHP
php继承的一个应用
2011/09/06 PHP
Yii2使用dropdownlist实现地区三级联动功能的方法
2016/07/18 PHP
PHP实现无限分类的实现方法
2016/11/14 PHP
使用onbeforeunload属性后的副作用
2007/03/08 Javascript
js+xml生成级联下拉框代码
2012/07/24 Javascript
JavaScript高级程序设计(第3版)学习笔记12 js正则表达式
2012/10/11 Javascript
JS修改css样式style浅谈
2013/05/06 Javascript
深入理解javascript中defer的作用
2013/12/11 Javascript
实例讲解JS中数组Array的操作方法
2014/05/09 Javascript
JavaScript中document.forms[0]与getElementByName区别
2015/01/21 Javascript
JavaScript基于setTimeout实现计数的方法
2015/05/08 Javascript
js简单网速测试方法完整实例
2015/12/15 Javascript
学习javascript面向对象 掌握创建对象的9种方式
2016/01/04 Javascript
真正好用的js验证上传文件大小的简单方法
2016/10/27 Javascript
解析js如何获取css样式
2016/12/11 Javascript
浅谈Angular.js中使用$watch监听模型变化
2017/01/10 Javascript
vue中的scope使用详解
2017/10/29 Javascript
分析JS中this引发的bug
2017/12/12 Javascript
解决vue 界面在苹果手机上滑动点击事件等卡顿问题
2018/11/27 Javascript
node.js实现微信开发之获取用户授权
2019/03/18 Javascript
JS表格的动态操作完整示例
2020/01/13 Javascript
vue单元格多列合并的实现
2020/11/26 Vue.js
Python复制文件操作实例详解
2015/11/10 Python
Python模块的加载讲解
2019/01/15 Python
Python logging设置和logger解析
2019/08/28 Python
澳大利亚自然和有机的健康美容产品一站式商店:Ziani Beauty
2017/12/28 全球购物
西班牙著名的珠宝首饰品牌:P D PAOLA
2018/09/15 全球购物
Auguste The Label官网:澳大利亚一家精品女装时尚品牌
2020/06/14 全球购物
毕业生个人的求职信范文
2013/12/03 职场文书
工程专业求职自荐书范文
2014/02/08 职场文书
林肯就职演讲稿
2014/05/19 职场文书
后勤管理员岗位职责
2014/08/27 职场文书
乡镇干部个人对照检查材料(群众路线)
2014/09/26 职场文书
物流业务员岗位职责
2015/04/03 职场文书
实施意见格式范本
2015/06/05 职场文书