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爬虫番外篇之Cookie和Session详解
Dec 27 Python
python操作excel文件并输出txt文件的实例
Jul 10 Python
python多进程控制学习小结
Oct 31 Python
python+flask实现API的方法
Nov 21 Python
Python实现E-Mail收集插件实例教程
Feb 06 Python
python matplotlib画图库学习绘制常用的图
Mar 19 Python
python爬取基于m3u8协议的ts文件并合并
Apr 26 Python
Python图像处理PIL各模块详细介绍(推荐)
Jul 17 Python
Python3常见函数range()用法详解
Dec 30 Python
python爬虫智能翻页批量下载文件的实例详解
Feb 02 Python
python wsgiref源码解析
Feb 06 Python
Python  lambda匿名函数和三元运算符
Apr 19 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
用PHP制作静态网站的模板框架(三)
2006/10/09 PHP
php数组函数序列之in_array() - 查找数组中是否存在指定值
2011/11/07 PHP
分享php分页的功能模块
2015/06/16 PHP
用JavaScript和注册表脚本实现右键收藏Web页选中文本
2007/01/28 Javascript
用showModalDialog弹出页面后,提交表单总是弹出一个新窗口
2009/07/18 Javascript
jQuery温习篇 强大的JQuery选择器
2010/04/24 Javascript
js中scrollHeight,scrollWidth,scrollLeft,scrolltop等差别介绍
2012/05/16 Javascript
解决JS中乘法的浮点错误的方法
2014/01/03 Javascript
javascript比较两个日期相差天数的方法
2015/07/23 Javascript
基于JavaScript实现类似于百度学术高级检索功能
2016/03/02 Javascript
实例浅析js的this
2016/12/11 Javascript
Vue.js 插件开发详解
2017/03/29 Javascript
vue实现表格增删改查效果的实例代码
2017/07/18 Javascript
基于JavaScript实现飘落星星特效
2017/08/10 Javascript
react-native fetch的具体使用方法
2017/11/01 Javascript
jQuery实现的简单无刷新评论功能示例
2017/11/08 jQuery
JavaScript设计模式之代理模式简单实例教程
2018/07/03 Javascript
[04:38]完美世界携手游戏风云打造 卡尔工作室饰品系统篇
2013/04/25 DOTA
在Linux下使用Python的matplotlib绘制数据图的教程
2015/06/11 Python
一个基于flask的web应用诞生(1)
2017/04/11 Python
pyqt5的QWebEngineView 使用模板的方法
2018/08/18 Python
TensorFlow实现Logistic回归
2018/09/07 Python
PyQt5 实现字体大小自适应分辨率的方法
2019/06/18 Python
python打印9宫格、25宫格等奇数格 满足横竖斜相加和相等
2019/07/19 Python
python爬虫中url管理器去重操作实例
2020/11/30 Python
CSS的pointer-events属性详细介绍(作用和注意事项)
2014/04/23 HTML / CSS
药学专业个人自我评价
2013/11/11 职场文书
商场促销活动方案
2014/02/08 职场文书
常务副总经理岗位职责
2014/04/12 职场文书
组工干部对照检查材料
2014/08/25 职场文书
地方白酒代理协议书
2014/10/25 职场文书
2014年护理工作总结范文
2014/11/14 职场文书
2014年团总支工作总结
2014/11/21 职场文书
师德先进个人事迹材料
2014/12/19 职场文书
感恩教师节主题班会
2015/08/12 职场文书
聘任协议书(挂靠)
2015/09/21 职场文书