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 25 Python
Python的Flask框架中配置多个子域名的方法讲解
Jun 07 Python
python下os模块强大的重命名方法renames详解
Mar 07 Python
TF-IDF与余弦相似性的应用(二) 找出相似文章
Dec 21 Python
python基于Selenium的web自动化框架
Jul 14 Python
python3使用GUI统计代码量
Sep 18 Python
PyQt5中多线程模块QThread使用方法的实现
Jan 31 Python
python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析
Mar 08 Python
利用Python实现某OA系统的自动定位功能
May 27 Python
Python lambda表达式原理及用法解析
Aug 18 Python
python中绕过反爬虫的方法总结
Nov 25 Python
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
May 31 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边学边教》(02.Apache+PHP环境配置――上篇)
2006/12/13 PHP
PHP 查找字符串常用函数介绍
2012/06/07 PHP
php抓取页面的几种方法详解
2013/06/17 PHP
使用php 获取时间今天明天昨天时间戳的详解
2013/06/20 PHP
解析linux下安装memcacheq(mcq)全过程笔记
2013/06/27 PHP
php关键字仅替换一次的实现函数
2015/10/29 PHP
jQuery 入门讲解1
2009/04/15 Javascript
JS简单实现多级Select联动菜单效果代码
2015/09/06 Javascript
jquery插件bootstrapValidator数据验证详解
2016/11/09 Javascript
jQuery控制控件文本的长度的操作方法
2016/12/05 Javascript
Angular排序实例详解
2017/06/28 Javascript
webpack实用小功能介绍
2018/01/02 Javascript
Layui组件Table绑定行点击事件和获取行数据的方法
2018/08/19 Javascript
vue加载完成后的回调函数方法
2018/09/07 Javascript
npm配置国内镜像资源+淘宝镜像的方法
2018/09/07 Javascript
Vue组件通信的几种实现方法
2019/04/25 Javascript
vue+elementUI实现表单和图片上传及验证功能示例
2019/05/14 Javascript
vue实现下拉加载其实没那么复杂
2019/08/13 Javascript
JS Ajax请求会话过期处理问题解决方法分析
2019/11/16 Javascript
Python实现简单过滤文本段的方法
2017/05/24 Python
Python中动态检测编码chardet的使用教程
2017/07/06 Python
Python 支付整合开发包的实现
2019/01/23 Python
python用win32gui遍历窗口并设置窗口位置的方法
2019/07/26 Python
Python Collatz序列实现过程解析
2019/10/12 Python
在keras中实现查看其训练loss值
2020/06/16 Python
python两种注释用法的示例
2020/10/09 Python
css3 中的新特性加强记忆详解
2016/04/16 HTML / CSS
雅诗兰黛香港官网:Estee Lauder香港
2017/09/26 全球购物
计算机大学生职业生涯规划书范文
2014/02/19 职场文书
党员入党表决心的话
2014/03/11 职场文书
酒店节能减排方案
2014/05/26 职场文书
硕士论文致谢范文
2015/05/14 职场文书
新学期家长寄语2016
2015/12/03 职场文书
青年文明号创建口号大全
2015/12/25 职场文书
外出考察学习心得体会
2016/01/18 职场文书
MySQL分区表实现按月份归类
2021/11/01 MySQL