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 相关文章推荐
Mac 上切换Python多版本
Jun 17 Python
python文件选择对话框的操作方法
Jun 27 Python
Python3 列表,数组,矩阵的相互转换的方法示例
Aug 05 Python
Django 自定义分页器的实现代码
Nov 24 Python
Python内置方法实现字符串的秘钥加解密(推荐)
Dec 09 Python
使用opencv将视频帧转成图片输出
Dec 10 Python
django 文件上传功能的相关实例代码(简单易懂)
Jan 22 Python
Python小整数对象池和字符串intern实例解析
Mar 21 Python
详解python安装matplotlib库三种失败情况
Jul 28 Python
Python 高效编程技巧分享
Sep 10 Python
Python判断变量是否是None写法代码实例
Oct 09 Python
python遍历路径破解表单的示例
Nov 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部分常见问题总结
2008/03/27 PHP
PHP开发过程中常用函数收藏
2009/12/14 PHP
php递归获取目录内文件(包含子目录)封装类分享
2013/12/25 PHP
CI使用Tank Auth转移数据库导致密码用户错误的解决办法
2014/06/12 PHP
php中unserialize返回false的解决方法
2014/09/22 PHP
php使用file函数、fseek函数读取大文件效率对比分析
2016/11/04 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
使两个iframe的高度与内容自适应,且相等
2006/11/20 Javascript
idTabs基于JQuery的根据URL参数选择Tab插件
2012/04/11 Javascript
jQuery中验证表单提交方式及序列化表单内容的实现
2014/01/06 Javascript
JavaScript中逗号运算符介绍及使用示例
2015/03/13 Javascript
jQuery幻灯片特效代码分享--鼠标滑过按钮时切换(2)
2020/11/18 Javascript
Bootstrap实现弹性搜索框
2016/07/11 Javascript
JavaScript中三个等号和两个等号的区别(== 和 ===)浅析
2016/09/22 Javascript
如何解决hover在ie6中的兼容性问题
2016/12/15 Javascript
JS滚动到指定位置导航栏固定顶部
2017/07/03 Javascript
jquery拖动改变div大小
2017/07/04 jQuery
Popup弹出框添加数据实现方法
2017/10/27 Javascript
vue实现某元素吸顶或固定位置显示(监听滚动事件)
2017/12/13 Javascript
详解async/await 异步应用的常用场景
2019/05/13 Javascript
python实现apahce网站日志分析示例
2014/04/02 Python
Python类的用法实例浅析
2015/05/27 Python
Python字符串和字典相关操作的实例详解
2017/09/23 Python
Python tornado队列示例-一个并发web爬虫代码分享
2018/01/09 Python
Python读取properties配置文件操作示例
2018/03/29 Python
Python如何实现转换URL详解
2019/07/02 Python
python 批量修改 labelImg 生成的xml文件的方法
2019/09/09 Python
浅谈html5 响应式布局
2014/12/24 HTML / CSS
戴尔加拿大官网:Dell加拿大
2016/09/17 全球购物
英国办公用品商店:Office Outlet
2018/04/04 全球购物
意大利灯具购物网站:Lampade.it
2018/10/18 全球购物
Java和Javasciprt的区别
2012/09/02 面试题
群胜软件Java笔试题
2012/09/29 面试题
委托书的写法
2014/08/30 职场文书
关于远足的感想
2015/08/10 职场文书
煤矿安全生产管理协议书
2016/03/22 职场文书