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实现全角半角字符互转的方法
Nov 28 Python
简单谈谈Python中的几种常见的数据类型
Feb 10 Python
python实现rsa加密实例详解
Jul 19 Python
Python实现的计数排序算法示例
Nov 29 Python
Python基础教程之内置函数locals()和globals()用法分析
Mar 16 Python
python批量修改文件编码格式的方法
May 31 Python
python破解bilibili滑动验证码登录功能
Sep 11 Python
Python中的引用和拷贝实例解析
Nov 14 Python
详解python opencv、scikit-image和PIL图像处理库比较
Dec 26 Python
python GUI库图形界面开发之PyQt5时间控件QTimer详细使用方法与实例
Feb 26 Python
解决python 执行sql语句时所传参数含有单引号的问题
Jun 06 Python
Python 连接 MySQL 的几种方法
Sep 09 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中养成7个面向对象的好习惯
2010/07/17 PHP
php函数的常用方法及注意之处小结
2011/07/10 PHP
PHP中加密解密函数与DES加密解密实例
2014/10/17 PHP
codeigniter中实现一次性加载多个view的方法
2015/03/20 PHP
Yii2创建多界面主题(Theme)的方法
2016/10/08 PHP
PHP+JS实现的实时搜索提示功能
2018/03/13 PHP
Linux基于php-fpm模式的lamp搭建phpmyadmin的方法
2018/10/25 PHP
thinkPHP5.1框架使用SemanticUI实现分页功能示例
2019/08/03 PHP
修改jquery里的dialog对话框插件为框架页(iframe) 的方法
2010/09/14 Javascript
jquery选择器大全 全面详解jquery选择器
2014/03/06 Javascript
牛叉的Jquery——Jquery与DOM对象的互相转换及DOM的三种操作
2015/10/29 Javascript
input点击后placeholder中的提示消息消失
2016/01/15 Javascript
JavaScript实现复制文章自动添加版权
2016/08/02 Javascript
JS获取鼠标位置距浏览器窗口距离的方法示例
2017/04/11 Javascript
jQuery简单实现对数组去重及排序操作实例
2017/10/31 jQuery
详解如何使用webpack打包JS
2018/06/21 Javascript
JavaScript前端页面搜索功能案例【基于jQuery】
2019/07/10 jQuery
[57:47]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python中使用enumerate函数遍历元素实例
2014/06/16 Python
Python 探针的实现原理
2016/04/23 Python
Python控制多进程与多线程并发数总结
2016/10/26 Python
Python实现的维尼吉亚密码算法示例
2018/04/12 Python
Linux CentOS Python开发环境搭建教程
2018/11/28 Python
如何用Python做一个微信机器人自动拉群
2019/07/03 Python
Flask框架学习笔记之路由和反向路由详解【图文与实例】
2019/08/12 Python
python实现网站微信登录的示例代码
2019/09/18 Python
django数据模型on_delete, db_constraint的使用详解
2019/12/24 Python
导入tensorflow:ImportError: libcublas.so.9.0 报错
2020/01/06 Python
匡威意大利官方商店 :Converse意大利
2018/11/27 全球购物
英国100%防污和防水的靴子:Muck Boot Company
2020/09/08 全球购物
就业推荐表自我鉴定范文
2014/03/21 职场文书
挂牌仪式策划方案
2014/05/18 职场文书
企业党支部工作总结2015
2015/05/21 职场文书
2016天猫双十一广告语
2016/01/28 职场文书
MySQL常见优化方案汇总
2022/01/18 MySQL
MongoDB数据库部署环境准备及使用介绍
2022/03/21 MongoDB