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标准库之循环器(itertools)介绍
Nov 25 Python
pymongo实现控制mongodb中数字字段做加法的方法
Mar 26 Python
python列出目录下指定文件与子目录的方法
Jul 03 Python
读写json中文ASCII乱码问题的解决方法
Nov 05 Python
python判断字符串是否是json格式方法分享
Nov 07 Python
Python可变参数会自动填充前面的默认同名参数实例
Nov 18 Python
python 画3维轨迹图并进行比较的实例
Dec 06 Python
解决django xadmin主题不显示和只显示bootstrap2的问题
Mar 30 Python
python如何建立全零数组
Jul 19 Python
Python绘图实现台风路径可视化代码实例
Oct 23 Python
Python中22个万用公式的小结
Jul 21 Python
django中websocket的具体使用
Jan 22 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 设计模式之 单例模式
2008/12/19 PHP
解析php curl_setopt 函数的相关应用及介绍
2013/06/17 PHP
php密码生成类实例
2014/09/24 PHP
php中socket的用法详解
2014/10/24 PHP
Apache连接PHP后无法启动问题解决思路
2015/06/18 PHP
ThinkPHP5框架实现简单的批量查询功能示例
2018/06/07 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
2019/11/24 PHP
使用jQuery fancybox插件打造一个实用的数据传输模态弹出窗体
2013/01/15 Javascript
JS localStorage实现本地缓存的方法
2013/06/22 Javascript
js获取当月最后一天实例代码
2013/11/19 Javascript
javascript:FF/Chrome与IE动态加载元素的区别说明
2014/01/26 Javascript
jquery 删除字符串最后一个字符的方法解析
2014/02/11 Javascript
使用FlexiGrid实现Extjs表格效果方法分享
2014/12/16 Javascript
js判断手机端(Android手机还是iPhone手机)
2015/07/22 Javascript
AngularJs  Creating Services详解及示例代码
2016/09/02 Javascript
微信小程序 websocket 实现SpringMVC+Spring+Mybatis
2017/08/04 Javascript
React复制到剪贴板的示例代码
2017/08/22 Javascript
原生JS+CSS实现炫酷重力模拟弹跳系统的登录页面
2017/11/01 Javascript
Javascript 实现 Excel 导入生成图表功能
2018/10/22 Javascript
Vue项目页面跳转时浏览器窗口上方显示进度条功能
2020/03/26 Javascript
angula中使用iframe点击后不执行变更检测的问题
2020/05/10 Javascript
Vue双向数据绑定(MVVM)的原理
2020/10/03 Javascript
[06:45]DOTA2-DPC中国联赛 正赛 Magma vs LBZS 选手采访
2021/03/11 DOTA
Python将DataFrame的某一列作为index的方法
2018/04/08 Python
python画图把时间作为横坐标的方法
2019/07/07 Python
Django用户认证系统 组与权限解析
2019/08/02 Python
Python Pickle 实现在同一个文件中序列化多个对象
2019/12/30 Python
使用TFRecord存取多个数据案例
2020/02/17 Python
使用python库xlsxwriter库来输出各种xlsx文件的示例
2020/09/01 Python
Pycharm配置lua编译环境过程图解
2020/11/28 Python
使用django自带的user做外键的方法
2020/11/30 Python
python 模拟登陆163邮箱
2020/12/15 Python
查摆问题对照检查材料
2014/08/28 职场文书
假释思想汇报范文
2014/10/11 职场文书
四川省传达学习贯彻党的群众路线教育实践活动总结大会精神新闻稿
2014/10/26 职场文书
2015年教师自我评价范文
2015/03/04 职场文书