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解析xml文件操作实例
Oct 05 Python
Python中下划线的使用方法
Mar 27 Python
Python命令行参数解析模块getopt使用实例
Apr 13 Python
python 数据的清理行为实例详解
Jul 12 Python
numpy找出array中的最大值,最小值实例
Apr 03 Python
python训练数据时打乱训练数据与标签的两种方法小结
Nov 08 Python
python 自动重连wifi windows的方法
Dec 18 Python
浅谈python str.format与制表符\t关于中文对齐的细节问题
Jan 14 Python
在win10和linux上分别安装Python虚拟环境的方法步骤
May 09 Python
Python识别html主要文本框过程解析
Feb 18 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
Nov 25 Python
python 将html转换为pdf的几种方法
Dec 29 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运行时强制显示出错信息的代码
2011/04/20 PHP
PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
2014/04/21 PHP
php查询mssql出现乱码的解决方法
2014/12/29 PHP
PHP getName()函数讲解
2019/02/03 PHP
jquery使用ColorBox弹出图片组浏览层实例演示
2013/03/14 Javascript
你必须知道的Javascript知识点之"单线程事件驱动"的使用
2013/04/23 Javascript
动态加载jquery库的方法
2014/02/12 Javascript
Jquery实现地铁线路指示灯提示牌效果的方法
2015/03/02 Javascript
配置Grunt的Task时通配符支持和动态生成文件名问题
2015/09/06 Javascript
基于HTML模板和JSON数据的JavaScript交互(移动端)
2016/04/06 Javascript
JavaScript编写带旋转+线条干扰的验证码脚本实例
2016/05/30 Javascript
微信小程序 教程之WXML
2016/10/18 Javascript
浅析vue component 组件使用
2017/03/06 Javascript
浅谈vue,angular,react数据双向绑定原理分析
2017/11/28 Javascript
jQuery无冲突模式详解
2019/01/17 jQuery
详解js创建对象的几种方法及继承
2019/04/12 Javascript
深入学习JavaScript中的bom
2019/05/27 Javascript
JAVA面试题 static关键字详解
2019/07/16 Javascript
微信小程序-API接口安全详解
2019/07/16 Javascript
js面试题之异步问题的深入理解
2020/09/20 Javascript
[43:41]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
Python实现字符串匹配算法代码示例
2017/12/05 Python
浅谈Python2、Python3相对路径、绝对路径导入方法
2018/06/22 Python
Django页面数据的缓存与使用的具体方法
2019/04/23 Python
深入浅析Python中的迭代器
2019/06/04 Python
5款实用的python 工具推荐
2020/10/13 Python
python爬虫scrapy基于CrawlSpider类的全站数据爬取示例解析
2021/02/20 Python
HTML5使用drawImage()方法绘制图像
2014/06/23 HTML / CSS
C/C++ 笔试、面试题目大汇总
2015/11/21 面试题
项目总经理岗位职责
2014/02/14 职场文书
体现团队精神的口号
2014/06/06 职场文书
党的群众路线批评与自我批评发言稿
2014/10/16 职场文书
北京导游词
2015/02/12 职场文书
党校团干班培训心得体会
2016/01/06 职场文书
2016年党员承诺书范文
2016/03/24 职场文书
原生JavaScript实现简单五子棋游戏
2021/06/28 Javascript