python创建方法draw_Python做图像处理(五)---ImageDraw综合应用实例:自制验证码...
前面几讲讲解了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综合应用实例:自制验证码...相关推荐
- python创建方法draw_Python生成便签图片的方法总结
利用Python如何生成便签图片详解 前言 最近有文字转图片的需求,但是不太想下载 APP,就使用 Python Pillow 实现了一个,效果如下: PIL 提供了 PIL.ImageDraw.Im ...
- python创建方法draw_Python draw.polygon方法代碼示例
本文整理匯總了Python中skimage.draw.polygon方法的典型用法代碼示例.如果您正苦於以下問題:Python draw.polygon方法的具體用法?Python draw.poly ...
- python图像切面numpy_NumPy做图像处理不香吗?我用Python把秋日里最美的景色做成了这种效果~...
一片落叶渲染了秋色:一季落花沧桑了流年. 不知不觉中秋天悄悄的来了,天气开始转凉,每天匆匆忙忙的在路上,顾不得身边的变化,一抬眼,竟因秋叶久久驻足! 我用Python把秋日里最美的景色做成了这种效果~ ...
- python创建方法draw_【python设计模式-创建型】工厂方法模式
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻 ...
- python雷达图怎么做_PYTHON绘制雷达图代码实例
这篇文章主要介绍了PYTHON绘制雷达图代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.雷达图 import matplotlib.py ...
- image pil 图像保存_如何利用python中的PIL库做图像处理?
自从这个世界上出现了Python编程,一切都好像有了新的思路与进展,比如人工智能,还有我们常用的PS,你可知道Python也可以做图像处理,用的就是PIL库,还没有用过的,还没有发现的,还没有实现过的 ...
- Python 之 使用 PIL 库做图像处理
http://www.cnblogs.com/way_testlife/archive/2011/04/17/2019013.html Python 之 使用 PIL 库做图像处理 1. 简介. 图像 ...
- 干货 | 用Python做图像处理:图像导数实战
导读:数量庞大的图像和视频充斥着我们的生活.我们需要对图片进行检索.分类等操作时,利用人工手段显然是不现实的.于是,计算机视觉相关技术便应运而生,并且得到了快速的发展.本文以时下最流行的Python语 ...
- python创建数字列表_Python 生成一个从0到n个数字的列表4种方法小结
Python 生成一个从0到n个数字的列表4种方法小结 我就废话不多说了,直接上代码吧! 第一种 def test1(): l = [] for i in range(1000): l = l + [ ...
最新文章
- 芯片设计抽象层及其设计风格
- 对unicode数据进行部分replace
- html遮罩层禁止滚动条滚动,遮罩层上弹窗滚动时禁止下层页面滚动的处理
- Raki的读paper小记:ELECTRA: PRE-TRAINING TEXT ENCODERS AS DISCRIMINATORS RATHER THAN GENERATORS
- 短信验证码如何保障用户信息及资金安全
- Windows 使用 ssh 命令行 通过密钥连接到 云服务器
- 陶哲轩实分析 5.2 节习题试解
- 使用Bookinfo应用测试Kuma服务网格
- mp4视频在flash中边下载边播放
- wps转换成word如何实现?不妨试试这两个小技巧
- LAN8720A芯片
- java_vinson_01:eclipse下载
- 聊聊storm的WindowedBolt
- 健康饮食--抗氧化与肠道调节
- 关于Proteus的复制粘贴快键
- 第十周实验指导--任务3--先建立一个Point(点)类,再派生出一个Circle(圆)类,再派生出一个Cylinder(圆柱体)类...
- BOSSCMS V2.0 已发布,免费可商用的开源CMS系统
- linux_安装jdk-8u333
- 生产者消费者模型的实现(线程通信)
- 基于分布式存储的文件系统4k对齐写优化
热门文章
- 串口光猫设备结构及主要特点介绍
- 【渝粤教育】21秋期末考试财务管理10164k2
- 【渝粤教育】电大中专会计电算化作业 题库
- 【渝粤教育】广东开放大学 现代服务业管理 形成性考核 (21)
- 计算机模拟定点突变,分子模拟对接和定点突变提高10β–去乙酰巴卡亭-华南农业大学学报.PDF...
- mysql drop_mysql恢复drop掉的表
- 【数字信号处理】希尔伯特变换系列1之相位处理(含MATLAB代码)
- mysql 大于号 优化_SQL优化 MySQL版 - 避免索引失效原则(二)
- mysql表主键类型_mysql表结构主键类型
- 通信工程制图期末考试大纲