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访问纯真IP数据库的代码
May 19 Python
分析Python编程时利用wxPython来支持多线程的方法
Apr 07 Python
在Python中测试访问同一数据的竞争条件的方法
Apr 23 Python
python实现电脑自动关机
Jun 20 Python
利用Python进行数据可视化常见的9种方法!超实用!
Jul 11 Python
tensorflow实现图像的裁剪和填充方法
Jul 27 Python
python得到windows自启动列表的方法
Oct 14 Python
Python 支付整合开发包的实现
Jan 23 Python
Win10 安装PyCharm2019.1.1(图文教程)
Sep 29 Python
Python连接SQLite数据库并进行增册改查操作方法详解
Feb 18 Python
Python实现从N个数中找到最大的K个数
Apr 02 Python
解决pip安装的第三方包在PyCharm无法导入的问题
Oct 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
Windows下安装PHP单元测试环境PHPUnit图文教程
2014/10/24 PHP
php数组保存文本与文本反编成数组实例
2014/11/13 PHP
ThinkPHP中自定义错误页面和提示页面实例
2014/11/22 PHP
PHP中array_slice函数用法实例详解
2014/11/25 PHP
浅析PHP echo 和 print 语句
2020/06/30 PHP
javascript sudoku 数独智力游戏生成代码
2010/03/27 Javascript
JavaScript禁止页面操作的示例代码
2013/12/17 Javascript
js事件监听机制(事件捕获)总结
2014/08/08 Javascript
JavaScript 实现完美兼容多浏览器的复制功能代码
2015/04/28 Javascript
javascript委托(Delegate)blur和focus用法实例分析
2015/05/26 Javascript
js实现楼层效果的简单实例
2016/07/15 Javascript
JS简单去除数组中重复项的方法
2016/09/13 Javascript
JavaScript利用闭包实现模块化
2017/01/13 Javascript
javaScript中的空值和假值
2017/12/18 Javascript
详解小程序input框失焦事件在提交事件前的处理
2019/05/05 Javascript
vue实现页面内容禁止选中功能,仅输入框和文本域可选
2019/11/09 Javascript
vue实现短信验证码登录功能(流程详解)
2019/12/10 Javascript
使用 Vue-TCB 快速在 Vue 应用中接入云开发的方法
2020/02/10 Javascript
javascript实现移动端触屏拖拽功能
2020/07/29 Javascript
浅谈javascript如何获取文件后缀名
2020/08/07 Javascript
关于vue-cli3打包代码后白屏的解决方案
2020/09/02 Javascript
[56:13]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第一场 1月10日
2021/03/11 DOTA
一个基于flask的web应用诞生 记录用户账户登录状态(6)
2017/04/11 Python
解决Pycharm 导入其他文件夹源码的2种方法
2020/02/12 Python
css3实现背景动态渐变效果
2019/12/10 HTML / CSS
英国领先的隐形眼镜在线供应商:Lenstore.co.uk
2019/11/24 全球购物
xml有哪些解析技术?区别是什么
2016/04/26 面试题
高三自我鉴定
2013/10/23 职场文书
有个性的自我评价范文
2013/11/15 职场文书
家长给小学生的评语
2014/01/30 职场文书
《雨霖铃》教学反思
2014/02/22 职场文书
管理失职检讨书范文
2015/05/05 职场文书
2015年小学图书室工作总结
2015/05/18 职场文书
2016新年感言
2015/08/03 职场文书
党员反腐倡廉学习心得体会
2015/08/15 职场文书
spring 项目实现限流方法示例
2022/07/15 Java/Android