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 21 Python
Python整型运算之布尔型、标准整型、长整型操作示例
Jul 21 Python
Django ORM框架的定时任务如何使用详解
Oct 19 Python
Python实现提取XML内容并保存到Excel中的方法
Sep 01 Python
python 定时任务去检测服务器端口是否通的实例
Jan 26 Python
如何使用Python进行OCR识别图片中的文字
Apr 01 Python
Django 配置多站点多域名的实现步骤
May 17 Python
Python loguru日志库之高效输出控制台日志和日志记录
Mar 07 Python
python属于跨平台语言码
Jun 09 Python
Python页面加载的等待方式总结
Feb 28 Python
聊聊python在linux下与windows下导入模块的区别说明
Mar 03 Python
Python破解极验滑动验证码详细步骤
May 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
DSP接收机前端设想
2021/03/02 无线电
杏林同学录(二)
2006/10/09 PHP
php生成静态文件的多种方法分享
2012/07/17 PHP
php数据库备份还原类分享
2014/03/20 PHP
php的GD库imagettftext函数解决中文乱码问题
2015/01/24 PHP
php操作MongoDB类实例
2015/06/17 PHP
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
Jquery 实现Tab效果 思路是js思路
2010/03/02 Javascript
jquery.boxy插件的iframe扩展代码
2010/07/02 Javascript
jQuery之$(document).ready()使用介绍
2012/04/05 Javascript
jquery $.each 和for怎么跳出循环终止本次循环
2013/09/27 Javascript
javascript操作css属性
2013/12/30 Javascript
jQuery实现带水平滑杆的焦点图动画插件
2016/03/08 Javascript
全国省市二级联动下拉菜单 js版
2016/05/10 Javascript
jQuery原理系列-常用Dom操作详解
2016/06/07 Javascript
关于vue-router的beforeEach无限循环的问题解决
2017/09/09 Javascript
详解package.json版本号规则
2019/08/01 Javascript
layui 地区三级联动 form select 渲染的实例
2019/09/27 Javascript
js找出5个数中最大的一个数和倒数第二大的数实现方法示例小结
2020/03/04 Javascript
echarts 使用formatter 修改鼠标悬浮事件信息操作
2020/07/20 Javascript
[02:26]DOTA2英雄米拉娜基础教程
2013/11/25 DOTA
python实现网页链接提取的方法分享
2014/02/25 Python
利用Python学习RabbitMQ消息队列
2015/11/30 Python
基于django ManyToMany 使用的注意事项详解
2019/08/09 Python
Python shutil模块用法实例分析
2019/10/02 Python
CSS3毛玻璃效果(blur)有白边问题的解决方法
2016/11/15 HTML / CSS
吃透移动端 1px的具体用法
2019/12/16 HTML / CSS
德国骆驼商店:ActiveFashionWorld
2017/11/18 全球购物
请说出这段代码执行后a和b的值分别是多少
2015/03/28 面试题
母亲节演讲稿范文
2014/01/02 职场文书
《理想的风筝》教学反思
2014/04/11 职场文书
2015年学校少先队工作总结
2015/07/20 职场文书
该怎么书写道歉信?
2019/07/03 职场文书
分析MySQL抛出异常的几种常见解决方式
2021/05/18 MySQL
Nginx动静分离配置实现与说明
2022/04/07 Servers
Apache Hudi 加速传统的批处理模式
2022/04/24 Servers