python生成随机图形验证码详解


Posted in Python onNovember 08, 2017

使用python生成随机图片验证码,需要使用pillow模块

1.安装pillow模块

pip install pillow

2.pillow模块的基本使用

1.创建图片

from PIL import Image
#定义使用Image类实例化一个长为400px,宽为400px,基于RGB的(255,255,255)颜色的图片
img1=Image.new(mode="RGB",size=(400,400),color=(255,255,255))

#把生成的图片保存为"pic.png"格式
with open("pic.png","wb") as f:
  img1.save(f,format="png")
#显示图片
img1.show()

运行程序,程序会在py文件的同级下生成一个名为"pic.png"的小图片,图片长为400px,宽为400px,颜色为白色.

2.创建画笔

#创建画笔,用于在图片上生成内容
draw1=ImageDraw.Draw(img1,mode="RGB")

3.在图片上生成点

#在(100,100)坐标上生成一个红点,指定的坐标不能超过图片的尺寸
draw1.point([100,100],pill="red")
#在(80,80)坐标上生成一个黑点,指定的坐标不能超过图片的尺寸
draw1.point([80,80],fill=(0,0,0))

4.在图片上画线

#第一个括号里面的参数是坐标,前两个数为开始坐标,后两个数为结束坐标
#括号里的第二个参数指定颜色,可以直接指定,也可以用RGB来表示颜色
draw1.line((100,100,100,300),fill="red")
draw1.line((100,200,200,100),fill="blue")

运行程序,画笔会在(100,100)到(100,300)坐标之间画一条红色的竖线,在(100,200)到(200,100)坐标之间画一根蓝色的斜线

5.在图片在画圆

#括号里的第一个参数是坐标,前两个数为起始坐标,后两个为结束坐标
#用这两个坐标之间的正方形区域生成一个圆,大括号里的第二个参数为圆的开始角度
#第三个参数为圆的结束角度,0到360表示所画的是一个完整的圆形,
#也可以指定的数字来生成一段为圆弧,最后一个参数表示颜色,也可以用RGB来表示想要的颜色
draw1.arc((100,100,300,300),0,360,fill="red")
draw1.arc((0,0,300,300),0,90,fill="blue")

6.在图片在写文本

#使用画笔的text方法在图片上生成文本
#第一个参数为坐标,第二个参数为所有生成的文本的内容
#第三个参数为文本的颜色
draw1.text([0,0],"python","blue")

7.在图片在生成指定字体的文本

#先实例化一个字体对象,第一个参数表示字体的路径,第二个参数表示字体大小
font1=ImageFont.truetype("One Chance.ttf",28)

#在图片上生成字体
#第一个括号里的参数表示坐标,第二个参数表示写入的内容
#第三个参数表示颜色,第四个参数表示使用的字体对象
draw1.text([200,200],"linux","red",font=font1)

图片验证码的实例

#导入random模块
import random
#导入Image,ImageDraw,ImageFont模块
from PIL import Image,ImageDraw,ImageFont
#定义使用Image类实例化一个长为120px,宽为30px,基于RGB的(255,255,255)颜色的图片
img1=Image.new(mode="RGB",size=(120,30),color=(255,255,255))
 #实例化一支画笔
draw1=ImageDraw.Draw(img1,mode="RGB")
#定义要使用的字体
font1=ImageFont.truetype("One Chance.ttf",28)
for i in range(5):
  #每循环一次,从a到z中随机生成一个字母或数字
  #65到90为字母的ASCII码,使用chr把生成的ASCII码转换成字符
  #str把生成的数字转换成字符串
  char1=random.choice([chr(random.randint(65,90)),str(random.randint(0,9))])
  #每循环一次重新生成随机颜色
  color1=(random.randint(0,255),random.randint(0,255),random.randint(0,255))
  #把生成的字母或数字添加到图片上
  #图片长度为120px,要生成5个数字或字母则每添加一个,其位置就要向后移动24px
  draw1.text([i*24,0],char1,color1,font=font1)
#把生成的图片保存为"pic.png"格式
with open("pic.png","wb") as f:
  img1.save(f,format="png")

每次运行,程序在程序的同级目录会生成一个包含随机字符的小图片.

总结

以上就是本文关于python生成随机图形验证码详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:Python爬虫实例爬取网站搞笑段子、Python入门之三角函数全解【收藏】、Python基础练习之用户登录实现代码分享等,有什么可以随时留言,小编会及时回复大家的。感谢朋友们对本站的支持!

Python 相关文章推荐
简单理解Python中的装饰器
Jul 31 Python
Python文件操作,open读写文件,追加文本内容实例
Dec 14 Python
Python 实现引用其他.py文件中的类和类的方法
Apr 29 Python
Python常见字典内建函数用法示例
May 14 Python
解决Python3 被PHP程序调用执行返回乱码的问题
Feb 16 Python
详解Django定时任务模块设计与实践
Jul 24 Python
pygame实现俄罗斯方块游戏(基础篇1)
Oct 29 Python
Python对象的属性访问过程详解
Mar 05 Python
Python 3.8 新功能来一波(大部分人都不知道)
Mar 11 Python
numpy实现RNN原理实现
Mar 02 Python
python爬取企查查企业信息之selenium自动模拟登录企查查
Apr 08 Python
Matplotlib绘制条形图的方法你知道吗
Mar 21 Python
Python爬虫实例爬取网站搞笑段子
Nov 08 #Python
python执行使用shell命令方法分享
Nov 08 #Python
python通过socket实现多个连接并实现ssh功能详解
Nov 08 #Python
Python基础练习之用户登录实现代码分享
Nov 08 #Python
python实现简单中文词频统计示例
Nov 08 #Python
python中如何正确使用正则表达式的详细模式(Verbose mode expression)
Nov 08 #Python
python如何使用正则表达式的前向、后向搜索及前向搜索否定模式详解
Nov 08 #Python
You might like
php中如何判断一个网页请求是ajax请求还是普通请求
2013/08/10 PHP
php上传图片到指定位置路径保存到数据库的具体实现
2013/12/30 PHP
PHP扩展模块Pecl、Pear以及Perl的区别
2014/04/09 PHP
跟我学Laravel之请求(Request)的生命周期
2014/10/15 PHP
YII分模块加载路由的实现方法
2018/10/01 PHP
Javascript中的相等与不等运算
2010/04/25 Javascript
jquery对表单操作2
2011/04/06 Javascript
node.js 一个简单的页面输出实现代码
2012/03/07 Javascript
浅谈javascript中的作用域
2012/04/07 Javascript
jQuery实现新消息在网页标题闪烁提示
2015/06/23 Javascript
Javascript 计算字符串在localStorage中所占字节数
2015/10/21 Javascript
JS在一定时间内跳转页面及各种刷新页面的实现方法
2016/05/26 Javascript
使用JavaScript实现弹出层效果的简单实例
2016/05/31 Javascript
JS异步加载的三种实现方式
2017/03/16 Javascript
react 父组件与子组件之间的值传递的方法
2017/09/14 Javascript
zepto.js 实时监听输入框的方法
2018/12/04 Javascript
JavaScript设计模式之观察者模式实例详解
2019/01/16 Javascript
js比较两个单独的数组或对象是否相等的实例代码
2019/04/28 Javascript
在vue中获取wangeditor的html和text的操作
2020/10/23 Javascript
[05:49]2014DOTA2TI4正赛第二日综述 昔日冠军纷纷落马 VG LGD占尽先机
2014/07/20 DOTA
python比较2个xml内容的方法
2015/05/11 Python
Python中encode()方法的使用简介
2015/05/18 Python
tf.truncated_normal与tf.random_normal的详细用法
2018/03/05 Python
HTML5实现移动端复制功能
2018/04/19 HTML / CSS
有趣的流行文化T恤、马克杯、手机壳和更多:Look Human
2019/01/07 全球购物
LUISAVIAROMA德国官网:时尚奢侈品牌购物网站
2020/11/12 全球购物
银行行长竞聘演讲稿
2014/04/23 职场文书
《我爱祖国》演讲稿1000字
2014/09/26 职场文书
查摆问题整改措施
2014/10/24 职场文书
2014年城管个人工作总结
2014/12/08 职场文书
部门优秀员工推荐信
2015/03/24 职场文书
2015年体育部工作总结
2015/04/02 职场文书
2016年社区服务活动总结
2016/04/06 职场文书
公司财务制度:成本管理控制制度模板
2019/11/19 职场文书
golang中的struct操作
2021/11/11 Golang
【D4DJ】美少女DJ企划 动画将于明年冬季开播第2季
2022/04/11 日漫