Python 随机生成中文验证码的实例代码


Posted in Python onMarch 20, 2013

python代码

 # -*- 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)

调用方法

 ic = ImageChar(fontColor=(100,211, 90)) 
 ic.randChinese(4) 
 ic.save("1.jpeg")
Python 相关文章推荐
python脚本实现查找webshell的方法
Jul 31 Python
一波神奇的Python语句、函数与方法的使用技巧总结
Dec 08 Python
python smtplib发送带附件邮件小程序
May 22 Python
对numpy中shape的深入理解
Jun 15 Python
Python设计模式之原型模式实例详解
Jan 18 Python
对python3 Serial 串口助手的接收读取数据方法详解
Jun 12 Python
pandas实现将日期转换成timestamp
Dec 07 Python
Python类继承和多态原理解析
Feb 05 Python
python3 sorted 如何实现自定义排序标准
Mar 12 Python
python实现秒杀商品的微信自动提醒功能(代码详解)
Apr 27 Python
使用sublime text3搭建Python编辑环境的实现
Jan 12 Python
pandas DataFrame.shift()函数的具体使用
May 24 Python
python 字符串格式化代码
Mar 17 #Python
Python中条件选择和循环语句使用方法介绍
Mar 13 #Python
python list 合并连接字符串的方法
Mar 09 #Python
python的正则表达式re模块的常用方法
Mar 09 #Python
Python语言编写电脑时间自动同步小工具
Mar 08 #Python
py2exe 编译ico图标的代码
Mar 08 #Python
python中wx将图标显示在右下角的脚本代码
Mar 08 #Python
You might like
浅析php学习的路线图
2013/07/10 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
2017/07/20 PHP
javascript实现的使用方向键控制光标在table单元格中切换
2010/11/17 Javascript
jQuery 的全选(全非选)即取得被选中的值使用介绍
2013/11/12 Javascript
jQuery中height()方法用法实例
2014/12/24 Javascript
JS对字符串编码的几种方式使用指南
2015/05/14 Javascript
jQuery使用drag效果实现自由拖拽div
2015/06/11 Javascript
js实现大转盘抽奖游戏实例
2015/06/24 Javascript
jquery form表单获取内容以及绑定数据
2016/02/24 Javascript
JavaScript html5 canvas绘制时钟效果
2016/03/01 Javascript
Jquery跨域获得Json的简单实例
2016/05/18 Javascript
AngularJS压缩JS技巧分析
2016/11/08 Javascript
微信小程序 五星评分(包括半颗星评分)实例代码
2016/12/14 Javascript
js实现功能比较全面的全选和多选
2017/03/02 Javascript
vue.js中指令Directives详解
2017/03/20 Javascript
ES6中Proxy与Reflect实现重载(overload)的方法
2017/03/30 Javascript
BootStrap中的Fontawesome 图标
2017/05/25 Javascript
详解JS获取HTML DOM元素的8种方法
2017/06/17 Javascript
BootStrap中Table隐藏后显示问题的实现代码
2017/08/31 Javascript
javascript将list转换成树状结构的实例
2017/09/08 Javascript
在vue里使用codemirror遇到的问题
2018/11/01 Javascript
vue强制刷新组件的方法示例
2019/02/28 Javascript
vue的路由映射问题及解决方案
2019/10/14 Javascript
p5.js实现故宫橘猫赏秋图动画
2019/10/23 Javascript
[06:06]2018DOTA2亚洲邀请赛主赛事第四日战况回顾 全明星赛欢乐上演
2018/04/07 DOTA
跟老齐学Python之有容乃大的list(2)
2014/09/15 Python
Python datetime和unix时间戳之间相互转换的讲解
2019/04/01 Python
pytest中文文档之编写断言
2019/09/12 Python
Python实现爬取网页中动态加载的数据
2020/08/17 Python
Python程序慢的重要原因
2020/09/04 Python
技校生自我鉴定范文
2013/09/26 职场文书
会计电算化大学生职业规划书
2014/02/05 职场文书
网络工程师自荐书范文
2014/04/01 职场文书
2014年司机工作总结
2014/11/21 职场文书
浅析MongoDB之安全认证
2021/06/26 MongoDB
Win11任务栏无法正常显示 资源管理器不停重启的解决方法
2022/07/07 数码科技