Python使用PIL模块生成随机验证码


Posted in Python onNovember 21, 2017

Python生成随机验证码,需要使用PIL模块,具体内容如下

安装:

pip3 install pillow

基本使用

1. 创建图片

from PIL import Image
img = Image.new(mode='RGB', size=(120, 30), color=(255, 255, 255))
 
# 在图片查看器中打开
# img.show()
 
# 保存在本地
with open('code.png','wb') as f:
 img.save(f,format='png')

2. 创建画笔,用于在图片上画任意内容

img = Image.new(mode='RGB', size=(120, 30), color=(255, 255, 255))
draw = ImageDraw.Draw(img, mode='RGB')

3. 画点

img = Image.new(mode='RGB', size=(120, 30), color=(255, 255, 255))
draw = ImageDraw.Draw(img, mode='RGB')
# 第一个参数:表示坐标
# 第二个参数:表示颜色
draw.point([100, 100], fill="red")
draw.point([300, 300], fill=(255, 255, 255))

4. 画线

img = Image.new(mode='RGB', size=(120, 30), color=(255, 255, 255))
draw = ImageDraw.Draw(img, mode='RGB')
# 第一个参数:表示起始坐标和结束坐标
# 第二个参数:表示颜色
draw.line((100,100,100,300), fill='red')
draw.line((100,100,300,100), fill=(255, 255, 255))

5. 画圆

img = Image.new(mode='RGB', size=(120, 30), color=(255, 255, 255))
draw = ImageDraw.Draw(img, mode='RGB')
# 第一个参数:表示起始坐标和结束坐标(圆要画在其中间)
# 第二个参数:表示开始角度
# 第三个参数:表示结束角度
# 第四个参数:表示颜色
draw.arc((100,100,300,300),0,90,fill="red")

6. 写文本

img = Image.new(mode='RGB', size=(120, 30), color=(255, 255, 255))
draw = ImageDraw.Draw(img, mode='RGB')
# 第一个参数:表示起始坐标
# 第二个参数:表示写入内容
# 第三个参数:表示颜色
draw.text([0,0],'python',"red")

7. 特殊字体文字

img = Image.new(mode='RGB', size=(120, 30), color=(255, 255, 255))
draw = ImageDraw.Draw(img, mode='RGB')
# 第一个参数:表示字体文件路径
# 第二个参数:表示字体大小
font = ImageFont.truetype("kumo.ttf", 28)
# 第一个参数:表示起始坐标
# 第二个参数:表示写入内容
# 第三个参数:表示颜色
# 第四个参数:表示颜色
draw.text([0, 0], 'python', "red", font=font)

图片验证码

import random

def check_code(width=120, height=30, char_length=5, font_file='kumo.ttf', font_size=28):
code = []
img = Image.new(mode='RGB', size=(width, height), color=(255, 255, 255))
draw = ImageDraw.Draw(img, mode='RGB')

def rndChar():
"""
生成随机字母 
:return:
"""
return chr(random.randint(65, 90))

def rndColor():
"""
生成随机颜色
:return:
"""
return (random.randint(0, 255), random.randint(10, 255), random.randint(64, 255))

# 写文字
font = ImageFont.truetype(font_file, font_size)
for i in range(char_length):
char = rndChar()
code.append(char)
h = random.randint(0, 4)
draw.text([i * width / char_length, h], char, font=font, fill=rndColor())

# 写干扰点
for i in range(40):
draw.point([random.randint(0, width), random.randint(0, height)], fill=rndColor())

# 写干扰圆圈
for i in range(40):
draw.point([random.randint(0, width), random.randint(0, height)], fill=rndColor())
x = random.randint(0, width)
y = random.randint(0, height)
draw.arc((x, y, x + 4, y + 4), 0, 90, fill=rndColor())

# 画干扰线
for i in range(5):
x1 = random.randint(0, width)
y1 = random.randint(0, height)
x2 = random.randint(0, width)
y2 = random.randint(0, height)

draw.line((x1, y1, x2, y2), fill=rndColor())

img = img.filter(ImageFilter.EDGE_ENHANCE_MORE)
return img,''.join(code)


if __name__ == '__main__':
# 1. 直接打开
# img,code = check_code()
# img.show()

# 2. 写入文件
# img,code = check_code()
# with open('code.png','wb') as f:
# img.save(f,format='png')

# 3. 写入内存(Python3)
# from io import BytesIO
# stream = BytesIO()
# img.save(stream, 'png')
# stream.getvalue()

# 4. 写入内存(Python2)
# import StringIO
# stream = StringIO.StringIO()
# img.save(stream, 'png')
# stream.getvalue()

pass

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
DJANGO-ALLAUTH社交用户系统的安装配置
Nov 18 Python
利用Python中的mock库对Python代码进行模拟测试
Apr 16 Python
基于hashlib模块--加密(详解)
Jun 21 Python
对python 矩阵转置transpose的实例讲解
Apr 17 Python
python 实现将txt文件多行合并为一行并将中间的空格去掉方法
Dec 20 Python
利用python-pypcap抓取带VLAN标签的数据包方法
Jul 23 Python
python利用tkinter实现屏保
Jul 30 Python
Pytorch 抽取vgg各层并进行定制化处理的方法
Aug 20 Python
python如何通过闭包实现计算器的功能
Feb 22 Python
浅谈python3 构造函数和析构函数
Mar 12 Python
Django日志及中间件模块应用案例
Sep 10 Python
详解pycharm连接远程linux服务器的虚拟环境的方法
Nov 13 Python
Python3中条件控制、循环与函数的简易教程
Nov 21 #Python
Python3 循环语句(for、while、break、range等)
Nov 20 #Python
Python虚拟环境项目实例
Nov 20 #Python
Python插件virtualenv搭建虚拟环境
Nov 20 #Python
使用tensorflow实现AlexNet
Nov 20 #Python
Django在win10下的安装并创建工程
Nov 20 #Python
Python2与python3中 for 循环语句基础与实例分析
Nov 20 #Python
You might like
DC动画很好看?新作烂得令人发指,名叫《红色之子》
2020/04/09 欧美动漫
Discuz Uchome ajaxpost小技巧
2011/01/04 PHP
Laravel框架中实现使用阿里云ACE缓存服务
2015/02/10 PHP
linux下实现定时执行php脚本
2015/02/13 PHP
php+ajax实现无刷新的新闻留言系统
2020/12/21 PHP
WordPress主题制作中自定义头部的相关PHP函数解析
2016/01/08 PHP
Laravel基础-关于引入公共文件的两种方式
2019/10/18 PHP
PHP实现简易图形计算器
2020/08/28 PHP
javascript判断用户浏览器插件安装情况的代码
2011/01/01 Javascript
让textarea自动调整大小的js代码
2011/04/12 Javascript
javascript仿qq界面的折叠菜单实现代码
2012/12/12 Javascript
node.js中的path.isAbsolute方法使用说明
2014/12/08 Javascript
javascript实现复选框超过限制即弹出警告框的方法
2015/02/25 Javascript
jQuery中slideUp 和 slideDown 的点击事件
2015/02/26 Javascript
JS实现自动变换的菜单效果代码
2015/09/09 Javascript
10个JavaScript中易犯小错误
2016/02/14 Javascript
javascript 四十条常用技巧大全
2016/09/09 Javascript
ajax级联菜单实现方法实例分析
2016/11/28 Javascript
jQuery图片轮播功能实例代码
2017/01/29 Javascript
JavaScript实现图片切换效果
2017/08/12 Javascript
详解Node.js一行命令上传本地文件到服务器
2019/04/22 Javascript
layui form表单提交后实现自动刷新
2019/10/25 Javascript
Vue Router 实现动态路由和常见问题及解决方法
2020/03/06 Javascript
javascript实现支付宝滑块验证码效果
2020/07/24 Javascript
[06:53]DOTA2每周TOP10 精彩击杀集锦vol.3
2014/06/25 DOTA
[01:03:51]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第三场
2018/04/09 DOTA
Python实现的批量下载RFC文档
2015/03/10 Python
python之super的使用小结
2018/08/13 Python
Python xlrd/xlwt 创建excel文件及常用操作
2020/09/24 Python
HTML5给汉字加拼音收起展开组件的实现代码
2020/04/08 HTML / CSS
电气工程及自动化专业自荐书范文
2013/12/18 职场文书
职业生涯规划书前言
2014/04/15 职场文书
安全月活动总结
2014/05/05 职场文书
微笑服务演讲稿
2014/05/13 职场文书
司法局群众路线教育实践活动整改措施思想汇报
2014/10/13 职场文书
Nginx使用ngx_http_upstream_module实现负载均衡功能示例
2022/08/05 Servers