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操作SQLite数据库的方法详解
Jun 16 Python
梯度下降法介绍及利用Python实现的方法示例
Jul 12 Python
Python 的类、继承和多态详解
Jul 16 Python
详解 Python 与文件对象共事的实例
Sep 11 Python
说说如何遍历Python列表的方法示例
Feb 11 Python
python多线程高级锁condition简单用法示例
Nov 07 Python
解决Keras 与 Tensorflow 版本之间的兼容性问题
Feb 07 Python
Python HTMLTestRunner可视化报告实现过程解析
Apr 10 Python
python初步实现word2vec操作
Jun 09 Python
Python实现中英文全文搜索的示例
Dec 04 Python
基于Pytorch版yolov5的滑块验证码破解思路详解
Feb 25 Python
Python图片检索之以图搜图
May 31 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中array_map与array_column之间的关系分析
2014/08/19 PHP
对比PHP对MySQL的缓冲查询和无缓冲查询
2016/07/01 PHP
[原创]PHP实现生成vcf vcard文件功能类定义与使用方法详解【附demo源码下载】
2017/09/02 PHP
js中将URL中的参数提取出来作为对象的实现代码
2011/08/16 Javascript
jquery实现盒子下拉效果示例代码
2013/09/12 Javascript
JavaScript实现三阶幻方算法谜题解答
2014/12/29 Javascript
js实现两点之间画线的方法
2015/05/12 Javascript
JavaScript函数使用的基本教程
2015/06/04 Javascript
javascript实现给定半径求出圆的面积
2015/06/26 Javascript
jquery实现的Banner广告收缩效果代码
2015/09/02 Javascript
理解jquery事件冒泡
2016/01/03 Javascript
javascript HTML5文件上传FileReader API
2020/03/27 Javascript
javascript实现不同颜色Tab标签切换效果
2016/04/27 Javascript
JavaScript编写一个简易购物车功能
2016/09/17 Javascript
JS+HTML5 Canvas实现简单的写字板功能示例
2018/08/30 Javascript
ES6 Symbol数据类型的应用实例分析
2019/06/26 Javascript
vue 实现走马灯效果
2019/10/28 Javascript
vue实现简单全选和反选功能
2020/09/15 Javascript
Python的SQLAlchemy框架使用入门
2015/04/29 Python
分享Python文本生成二维码实例
2016/01/06 Python
Python 一句话生成字母表的方法
2019/01/02 Python
基于python的socket实现单机五子棋到双人对战
2020/03/24 Python
Python爬虫之Spider类用法简单介绍
2020/08/04 Python
python对批量WAV音频进行等长分割的方法实现
2020/09/25 Python
用python-webdriver实现自动填表的示例代码
2021/01/13 Python
微软英国官方网站:Microsoft英国
2016/10/15 全球购物
ONLY瑞典官网:世界知名服装品牌
2018/06/19 全球购物
台湾旅游网站:灿星旅游
2018/10/11 全球购物
中学生学雷锋演讲稿
2014/04/26 职场文书
公司市场专员岗位职责
2014/06/29 职场文书
试用期自我评价怎么写
2015/03/10 职场文书
2015年药品销售工作总结范文
2015/05/25 职场文书
微信早安问候语
2015/11/10 职场文书
python 算法题——快乐数的多种解法
2021/05/27 Python
vue项目中的支付功能实现(微信支付和支付宝支付)
2022/02/18 Vue.js
前端canvas中物体边框和控制点的实现示例
2022/08/05 Javascript