下面是一个实战项目的结果。

#coding: utf-8

import Image,ImageDraw,ImageFont,os,string,random,ImageFilter

def initChars():

"""

允许的字符集合,初始集合为数字、大小写字母

usage: initChars()

param: None

return: list

返回允许的字符集和

for: picChecker类初始字符集合

todo: Nothing

"""

nums = [str(i) for i in range(10)]

letterCase = [

'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k',

'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',

'w', 'x', 'y', 'z'

]

upperCase = [

'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K',

'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',

'W', 'X', 'Y', 'Z',

]

return(nums+letterCase+upperCase)

class picChecker():

"""

图片验证代码:

1) 用户注册需填写图片验证码,以阻止机器人注册

2) 图片验证码字符数为 4 位(大小写字母与数字,不区分大小写)。

用户如果没有填写验证码或没有填写正确的验证码,

页面友好性提示用户填写(同时程序方面也做相应限制)

usage: pc = picChecker().createChecker()

param: 很多,如下

chars 允许的字符集合,

类型 list

默认值 initChars()

例子 ['1','2','3']

length 字符串长度

类型 integer

默认值 4

size 图片大小

类型 tutle

默认值 (120,30)

例子 (120,30)

fontsize 字体大小

类型 integer

默认值 25

begin 字符其实位置,即左上角位置

类型 tutle

默认值 (5,-2)

outputType 输出类型

类型 string

默认值 GIF

可选值 GIF JPEG TIFF PNG

mode 图片模式

类型 string

可选值 RGB L (还有其他模式,但只推荐这2种)

默认值 RGB

backgroundColor 背景色

foregroundColor 前景色

当mode=RGB时,backgroundColor,foregroundColor为tutle类型

取值为(integer,integer,integer)

表示RGB颜色值

当mode=L时,backgroundColor,foregroundColor为数字,表示黑白模式

取值为0-255

表示灰度

fonttype 字体路径

类型 string

默认值 "simsum.ttc"

jamNum 干扰线条数

类型 (int1,int1)

int1 干扰线条数下限,包含

int2 干扰线条数上线,包含

pointBorder 散点噪音

构造方法:对每个像素点使用随机函数确定是否在该像素上画散点噪音

类型 (int1,int2)

int1越大 散点越多

int2越大 散点越少

return: [picCheckerStr,pic]

picCheckerStr: 表示返回图片中对应的字符串,可用于session验证以及其他用途

pic : 返回的图片,类型为Image

for :

todo : Nothing

"""

#默认字体路径

#DEFAULT_FONT_PATH = os.path.join(os.path.dirname(__file__),'simsun.ttc').replace('\\','/')

def __init__(self,chars = initChars(),size = (120,30),fontsize = 25,

begin = (5,-2),outputType = 'GIF',mode = 'RGB' ,

backgroundColor = (255,255,255), foregroundColor = (0,0,255),

fonttype = "simsun.ttc",length = 4,jamNum = (1,2),

pointBorder = (40,39)):

"""

初始化配置

"""

#验证码配置

#允许的字符串

self.chars = chars

#图片大小

self.size = size

#字符起始插入点

self.begin = begin

#字符串长度

self.length = length

#输出类型

self.outputType = outputType

#字符大小

self.fontsize = fontsize

#图片模式

self.mode = mode

#背景色

self.backgroundColor = backgroundColor

#前景色

self.foregroundColor = foregroundColor

#干扰线条数

self.jamNum = jamNum

#散点噪音界限

self.pointBorder = pointBorder

#字体库路径

self.fonttype = fonttype

#设置字体,大小默认为18

self.font = ImageFont.truetype(self.fonttype, self.fontsize)

def getPicString(self):

"""

usage: getPicString()

return: string

for : 生成给定长度的随机字符串

todo: Nothing

"""

#初始化字符串长度

length = self.length

#初始化字符集合

chars = self.chars

#获得字符集合

selectedChars = random.sample(chars,length)

charsToStr = string.join(selectedChars,'')

return(charsToStr)

def createChecker(self):

"""

usage: createChecker()

return: [str,pic]

str:对应的字符串

pic:对应的图片

for:

todo:

"""

#获得验证码字符串

randStr = self.getPicString()

#将字符串加入空格

randStr1 = string.join([i+" " for i in randStr],"")

#创建图形

im = Image.new(self.mode,self.size,self.backgroundColor)

#创建画笔

draw = ImageDraw.Draw(im)

#输出随机文本

draw.text(self.begin, randStr1, font=self.font,fill=self.foregroundColor)

#im = self.drawText(draw,randStr,im)

#干扰线

self.createJam(draw)

#散点噪音

self.createPoints(draw)

#图形扭曲

para = [1-float(random.randint(1,2))/100,

0,

0,

0,

1-float(random.randint(1,10))/100,

float(random.randint(1,2))/500,

0.001,

float(random.randint(1,2))/500

]

#print randStr,para

im = im.transform(im.size, Image.PERSPECTIVE,para)

#图像滤镜

im=im.filter(ImageFilter.EDGE_ENHANCE_MORE)

im.save("checker.jpg",self.outputType)

return([randStr,im])

def createJam(self,draw):

"""

usage: 创建干扰线

para: draw 表示画笔

return: None

for:

todo:

"""

#干扰线条数

lineNum = random.randint(self.jamNum[0],self.jamNum[1])

for i in range(lineNum):

begin = (random.randint(0,self.size[0]),random.randint(0,self.size[1]))

end = (random.randint(0,self.size[0]),random.randint(0,self.size[1]))

draw.line([begin,end],fill = (0,0,0))

def createPoints(self,draw):

"""

usage: 创建散点噪音

para: draw 表示画笔

return: None

for:

todo:

"""

#散点噪音

for x in range(self.size[0]):

for y in range(self.size[1]):

flag = random.randint(0,self.pointBorder[0])

if flag > self.pointBorder[1]:

draw.point((x,y),fill = (0,0,0))

del flag

if __name__ == '__main__':

c=picChecker()

t=c.createChecker()

print(t)

python验证码校验代码_python 图片验证码代码相关推荐

  1. html获取随机字母,html5 canvas随机生成英文字母数字组合图片验证码代码

    简单又实用的html5 canvas随机生成英文字母数字组合图片验证码代码,点击验证码图片可更换一组,还可随意修改验证码的内容,样式. 查看演示 下载资源: 27 次 下载资源 下载积分: 20 积分 ...

  2. python训练好的图片验证_Python图片验证码降噪处理实例

    图片验证码算是网络数据采集上的一道拦路虎,虽然有诸多公开的ORC接口.云打码平台,一旦大规模应用起来,还是内部写程序进行识别处理比较好. 而自己写代码进行识别的话,又有很多种方案,比如最近火热的神经网 ...

  3. python 识别图形验证码_Python图片验证码降噪处理实例!此乃识别验证码神技!...

    图片验证码算是网络数据采集上的一道拦路虎,虽然有诸多公开的ORC接口.云打码平台,一旦大规模应用起来,还是内部写程序进行识别处理比较好. 而自己写代码进行识别的话,又有很多种方案,比如最近火热的神经网 ...

  4. python太阳花代码_python太阳花绘制代码教程

    python太阳花绘制代码教程内容摘要 python太阳花绘制代码教程什么意思您好可以在手机里设置,苏州心理学教程,读书的.读书笔记写作方法读书笔记一般分为摘录.提纲.批注.心得几种,主播教程内容,读 ...

  5. python画花朵代码_python画花朵代码分享

    python画花朵代码分享 发布时间:2020-05-09 15:36:11 来源:亿速云 阅读:295 作者:小新 这篇文章主要为大家详细介绍了python画花朵代码,文中示例代码介绍的非常详细,具 ...

  6. python猜数字代码_python猜数代码

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 本文实例为大家分享了python实现猜数游戏的具体代码,供大家参考,具体内容如下 ...

  7. pythonc代码_Python实现C代码统计工具(一)

    Python实现C代码统计工具(一) 标签: Python 代码统计 声明 本文将基于Python2.7脚本语言,实现一个简易的C代码统计工具. 本文同时也发布于作业部落,视觉效果略有不同. 一. 问 ...

  8. 博客图片html代码,【html博客代码】图片羽化代码

    (供初学HTML代码的朋友参考) 用代码制作图片羽化效果 图片羽化也有的叫雾化,就是用图像软件或代码制作,使图片边缘产生朦胧的美化效果.代码作图片羽化的方法很容易,用html贴图标签加入css样式表滤 ...

  9. python selenium 验证码识别_Python网络爬虫之如何用代码识别图片验证码

    验证码 当我们在爬取某些网站的时候,对于一些频繁请求,网站会识别你是机器还是人.如果是机器,直接不允许你访问这个网站了,直接返回404或者禁止访问. 最常见的方式就是验证码.验证码的主要功能就是区分当 ...

  10. python图像识别代码_python图像识别--验证码

    1.pip3 install pyocr 2.pip3 install pillow or easy_install Pillow 4.要求python默认安装在C盘 5.找到 pytesseract ...

最新文章

  1. UA OPTI501 电磁波 Lorentz Oscillator Model 4 Hilbet变换与Kramers-Konig关系式
  2. 河马 webshell扫描器对linux服务器进行安全扫描
  3. 《游戏编程入门 4th》笔记(1 / 14):Windows初步
  4. php foreach结果如何保存_每天一个PHP语法四引用使用及实现
  5. python基础: day4作业计算器
  6. 域控服务器降级失败,降级域控制器时出错 - Windows Server | Microsoft Docs
  7. 【转】visio画UML用例图没有include关系的解决方法
  8. Python之路-4
  9. Spring Cloud(Greenwich版)-01-服务生产者与服务消费者
  10. 创建CocoaPods的Framework Swift组件化之路(下)
  11. [讲课视频]谈谈C/C++中的整数
  12. OOP 概念的编程基础思想----我的感想
  13. 干支纪年法简便算法_初中历史所涉及的四种纪年法
  14. H5 实现电子签名功能-VUE--12301合同签署类似功能
  15. 借助新电商平台,湖北荷塘三宝直达全国餐桌
  16. linux日志文件详解
  17. 什么是Kivy???
  18. 如何从官方网站下载jdk1.7?
  19. Python——字符串转换与处理
  20. python中倒背如流_初中生“倒背如流”的3篇文言文,尤其是第3,学渣:so easy!...

热门文章

  1. Asp.net 中 IHttpHandlerFactory接口 对应web.config 中的节点
  2. DE4-530的OpenCL开发环境搭建
  3. 给大家推荐一本书啊啊~
  4. TCP/IP长连接和短连接
  5. SNS网站中怎样获取MSN联系人信息
  6. 【版本控制】Github for Windows客户端的使用
  7. 【VS2010学习笔记】【异常处理】二(VS2008/VS2010中MFC“资源被另一个编辑器打开”)
  8. 基于迭代局部搜索和随机惯性权重的BA算法MATLAB实现(ILSSIWBA)
  9. 按照某列属性拆分Excel文件
  10. excel 使用排序工具实现每隔一行加一行空行