python生成随机验证码(中文验证码)示例


Posted in Python onApril 03, 2014
# -*- coding: utf-8 -*-
import Image,ImageDraw,ImageFont
import random
import math, string  
class RandomChar():
  """用于随机生成汉字"""
  @staticmethod
  def Unicode():
    val = random.randint(0x4E00, 0x9FBF)
    return unichr(val)  
  @staticmethod
  def GB2312():
    head = random.randint(0xB0, 0xCF)
    body = random.randint(0xA, 0xF)
    tail = random.randint(0, 0xF)
    val = ( head << 8 ) | (body << 4) | tail
    str = "%x" % val
    return str.decode('hex').decode('gb2312')  
class ImageChar():
  def __init__(self, fontColor = (0, 0, 0),
                     size = (100, 40),
                     fontPath = 'wqy.ttc',
                     bgColor = (255, 255, 255),
                     fontSize = 20):
    self.size = size
    self.fontPath = fontPath
    self.bgColor = bgColor
    self.fontSize = fontSize
    self.fontColor = fontColor
    self.font = ImageFont.truetype(self.fontPath, self.fontSize)
    self.image = Image.new('RGB', size, bgColor)  
  def rotate(self):
    self.image.rotate(random.randint(0, 30), expand=0)  
  def drawText(self, pos, txt, fill):
    draw = ImageDraw.Draw(self.image)
    draw.text(pos, txt, font=self.font, fill=fill)
    del draw  
  def randRGB(self):
    return (random.randint(0, 255),
           random.randint(0, 255),
           random.randint(0, 255))  
  def randPoint(self):
    (width, height) = self.size
    return (random.randint(0, width), random.randint(0, height))  
  def randLine(self, num):
    draw = ImageDraw.Draw(self.image)
    for i in range(0, num):
      draw.line([self.randPoint(), self.randPoint()], self.randRGB())
    del draw  
  def randChinese(self, num):
    gap = 5
    start = 0
    for i in range(0, num):
      char = RandomChar().GB2312()
      x = start + self.fontSize * i + random.randint(0, gap) + gap * i
      self.drawText((x, random.randint(-5, 5)), RandomChar().GB2312(), self.randRGB())
      self.rotate()
    self.randLine(18)  
  def save(self, path):
    self.image.save(path)
Python 相关文章推荐
python中set常用操作汇总
Jun 30 Python
python对象及面向对象技术详解
Jul 19 Python
python实现读取并显示图片的两种方法
Jan 13 Python
Python实现购物车功能的方法分析
Nov 10 Python
pandas创建新Dataframe并添加多行的实例
Apr 08 Python
Python迭代器与生成器基本用法分析
Jul 26 Python
详解python中的线程与线程池
May 10 Python
Python爬虫动态ip代理防止被封的方法
Jul 07 Python
matlab 计算灰度图像的一阶矩,二阶矩,三阶矩实例
Apr 22 Python
利用Python如何画一颗心、小人发射爱心
Feb 21 Python
pandas apply使用多列计算生成新的列实现示例
Feb 24 Python
opencv读取视频并保存图像的方法
Jun 04 Python
python读取html中指定元素生成excle文件示例
Apr 03 #Python
python实现zencart产品数据导入到magento(python导入数据)
Apr 03 #Python
python模拟登陆阿里妈妈生成商品推广链接
Apr 03 #Python
python多线程抓取天涯帖子内容示例
Apr 03 #Python
python局域网ip扫描示例分享
Apr 03 #Python
python实现数通设备tftp备份配置文件示例
Apr 02 #Python
python实现巡检系统(solaris)示例
Apr 02 #Python
You might like
模仿OSO的论坛(四)
2006/10/09 PHP
PHP两种去掉数组重复值的方法比较
2014/06/19 PHP
PHP isset()与empty()的使用区别详解
2017/02/10 PHP
PHP匿名函数(闭包函数)详解
2019/03/22 PHP
jquery利用event.which方法获取键盘输入值的代码
2011/10/09 Javascript
jquery命令汇总,方便使用jquery的朋友
2012/06/26 Javascript
js替代copy(示例代码)
2013/11/27 Javascript
解决js中window.open弹出的是上次的缓存页面问题
2013/12/29 Javascript
纯Javascript实现ping功能的方法
2015/03/20 Javascript
Javascript优化技巧之短路表达式详细介绍
2015/03/27 Javascript
js显示文本框提示文字的方法
2015/05/07 Javascript
jQuery实现左侧导航模块的显示与隐藏效果
2016/07/04 Javascript
Vue组件化通讯的实例代码
2017/06/23 Javascript
checkbox:click事件触发span元素内容改变的方法
2017/09/11 Javascript
angularJs select绑定的model取不到值的解决方法
2018/10/08 Javascript
使用gulp构建前端自动化的方法示例
2018/12/25 Javascript
详解如何更好的使用module vuex
2019/03/27 Javascript
Python如何为图片添加水印
2016/11/25 Python
Python 实现微信防撤回功能
2019/04/29 Python
Django框架中间件(Middleware)用法实例分析
2019/05/24 Python
django框架模型层功能、组成与用法分析
2019/07/30 Python
Keras - GPU ID 和显存占用设定步骤
2020/06/22 Python
Python Opencv轮廓常用操作代码实例解析
2020/09/01 Python
django使用graphql的实例
2020/09/02 Python
Python中用xlwt制作表格实例讲解
2020/11/05 Python
H5 canvas中width、height和style的宽高区别详解
2018/11/02 HTML / CSS
详解Canvas 跨域脱坑实践
2018/11/07 HTML / CSS
美国半成品食材配送服务商:Home Chef
2018/01/25 全球购物
关于毕业的中学校园广播稿
2014/01/26 职场文书
电视节目策划方案
2014/05/16 职场文书
四风对照检查材料范文
2014/09/27 职场文书
2014年驾驶员工作总结
2014/11/18 职场文书
不尊敬老师的检讨书
2014/12/21 职场文书
创先争优承诺书
2015/01/20 职场文书
2016党员干部廉洁自律心得体会
2016/01/13 职场文书
MySQL为数据表建立索引的原则详解
2022/03/03 MySQL