前面几讲讲解了pillow库中两个最重要的模块,Image模块与ImageDraw模块,本讲小编将这两个模块综合应用起来,来制作一个随机自动生成验证码的程序。

1.生成验证码程序的算法设计原理

验证码通常用于网络,是网站为了防止恶意注册和网络机器人登录所采用的一种验证手段。验证码就是随机数字或符号生成的一幅图片,图片里加上一些干扰象素(防止OCR即光学字符识别),由用户肉眼识别其中的验证码信息,输入表单提交网站验证,验证成功后才能等登入系统,使用系统的某项功能。

依据验证码的生成原理,本程序的算法设计流程图如下:

2.算法的实现过程

(1).首先生成背景为白色的一张image对象

imageTemp=Image.new('RGB',(200,200),

(255,255,255))

得如下一张200x200的白色背景的图片

(图一)

(2) 接下来开始利用ImageDraw模块在图片上写入随机生成的字母与数字,具体代码如下:

font=ImageFont.truetype('STHUPO.TTF',45)

draw=ImageDraw.Draw(imageTemp)

text=getCharacters(6)

width,height=draw.textsize(text,font)

#绘制验证码offset=2fori inrange(characterNumber):

offset+=width//characterNumber

position=(offset,

(size[1]-height)//2+random.randint(-10,10))

draw.text(xy=position,text=text[i],

font=font,fill=getColor())imageTemp.show()

注意:以上代码中出现了两个函数:一个是getCharacters(num)函数用于生成num个的随机字母与数字的组合字符串。代码如下

defgetCharacters(length):

result=''fori inrange(length):

result+=random.choice(characters)

returnresult

其中的characters是由所有字母+数字构成的字符串,生成方式采用python的标准库string中的方法来实现,具体实现方式为

characters=string.ascii_letters+string.digits

以上代码中出现的另一个自定义函数为getColor函数,作用是生成随机颜色。代码如下

defgetColor():

r=random.randint(0,255)

g=random.randint(0,255)

b=random.randint(0,255)

return(r,g,b)

最终,代码运行后会实现向图一中写入随机字母与数字。效果如下:

(3) 为了绕开OCR技术,利用ImageDraw模块向图片中写入干扰元素,包括位置与颜色均随机的像素点、直线以及曲线,具体代码如下:

#绘制干扰点fori inrange(int(size[0]*size[1]*0.03)):

draw.point((random.randint(0,size[0]),

random.randint(0,size[1])),fill=getColor())# 绘制干扰线条fori inrange(8):

start=(0,random.randint(0,size[1]-1))

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

draw.line([start,end],fill=getColor(),width=1)

#绘制弧线fori inrange(8):

start=(-10,-10)

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

draw.arc(start+end,0,270,fill=getColor(),width=1)

imageTemp.save('result.jpg')

imageTemp.show()

最终,程序运行后,效果如下图所示:

当然,由于字母与数字与颜色都是随机选取的,因此,程序每运行一次效果都不一样。以下列出了一些随机的运行效果。怎么样,你也来试一试吧!

end

扫码关注公众号

推荐阅读

python创建方法draw_Python做图像处理(五)---ImageDraw综合应用实例:自制验证码...相关推荐

  1. python创建方法draw_Python生成便签图片的方法总结

    利用Python如何生成便签图片详解 前言 最近有文字转图片的需求,但是不太想下载 APP,就使用 Python Pillow 实现了一个,效果如下: PIL 提供了 PIL.ImageDraw.Im ...

  2. python创建方法draw_Python draw.polygon方法代碼示例

    本文整理匯總了Python中skimage.draw.polygon方法的典型用法代碼示例.如果您正苦於以下問題:Python draw.polygon方法的具體用法?Python draw.poly ...

  3. python图像切面numpy_NumPy做图像处理不香吗?我用Python把秋日里最美的景色做成了这种效果~...

    一片落叶渲染了秋色:一季落花沧桑了流年. 不知不觉中秋天悄悄的来了,天气开始转凉,每天匆匆忙忙的在路上,顾不得身边的变化,一抬眼,竟因秋叶久久驻足! 我用Python把秋日里最美的景色做成了这种效果~ ...

  4. python创建方法draw_【python设计模式-创建型】工厂方法模式

    工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻 ...

  5. python雷达图怎么做_PYTHON绘制雷达图代码实例

    这篇文章主要介绍了PYTHON绘制雷达图代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.雷达图 import matplotlib.py ...

  6. image pil 图像保存_如何利用python中的PIL库做图像处理?

    自从这个世界上出现了Python编程,一切都好像有了新的思路与进展,比如人工智能,还有我们常用的PS,你可知道Python也可以做图像处理,用的就是PIL库,还没有用过的,还没有发现的,还没有实现过的 ...

  7. Python 之 使用 PIL 库做图像处理

    http://www.cnblogs.com/way_testlife/archive/2011/04/17/2019013.html Python 之 使用 PIL 库做图像处理 1. 简介. 图像 ...

  8. 干货 | 用Python做图像处理:图像导数实战

    导读:数量庞大的图像和视频充斥着我们的生活.我们需要对图片进行检索.分类等操作时,利用人工手段显然是不现实的.于是,计算机视觉相关技术便应运而生,并且得到了快速的发展.本文以时下最流行的Python语 ...

  9. python创建数字列表_Python 生成一个从0到n个数字的列表4种方法小结

    Python 生成一个从0到n个数字的列表4种方法小结 我就废话不多说了,直接上代码吧! 第一种 def test1(): l = [] for i in range(1000): l = l + [ ...

最新文章

  1. 芯片设计抽象层及其设计风格
  2. 对unicode数据进行部分replace
  3. html遮罩层禁止滚动条滚动,遮罩层上弹窗滚动时禁止下层页面滚动的处理
  4. Raki的读paper小记:ELECTRA: PRE-TRAINING TEXT ENCODERS AS DISCRIMINATORS RATHER THAN GENERATORS
  5. 短信验证码如何保障用户信息及资金安全
  6. Windows 使用 ssh 命令行 通过密钥连接到 云服务器
  7. 陶哲轩实分析 5.2 节习题试解
  8. 使用Bookinfo应用测试Kuma服务网格
  9. mp4视频在flash中边下载边播放
  10. wps转换成word如何实现?不妨试试这两个小技巧
  11. LAN8720A芯片
  12. java_vinson_01:eclipse下载
  13. 聊聊storm的WindowedBolt
  14. 健康饮食--抗氧化与肠道调节
  15. 关于Proteus的复制粘贴快键
  16. 第十周实验指导--任务3--先建立一个Point(点)类,再派生出一个Circle(圆)类,再派生出一个Cylinder(圆柱体)类...
  17. BOSSCMS V2.0 已发布,免费可商用的开源CMS系统
  18. linux_安装jdk-8u333
  19. 生产者消费者模型的实现(线程通信)
  20. 基于分布式存储的文件系统4k对齐写优化

热门文章

  1. 串口光猫设备结构及主要特点介绍
  2. 【渝粤教育】21秋期末考试财务管理10164k2
  3. 【渝粤教育】电大中专会计电算化作业 题库
  4. 【渝粤教育】广东开放大学 现代服务业管理 形成性考核 (21)
  5. 计算机模拟定点突变,分子模拟对接和定点突变提高10β–去乙酰巴卡亭-华南农业大学学报.PDF...
  6. mysql drop_mysql恢复drop掉的表
  7. 【数字信号处理】希尔伯特变换系列1之相位处理(含MATLAB代码)
  8. mysql 大于号 优化_SQL优化 MySQL版 - 避免索引失效原则(二)
  9. mysql表主键类型_mysql表结构主键类型
  10. 通信工程制图期末考试大纲