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 相关文章推荐
python中使用百度音乐搜索的api下载指定歌曲的lrc歌词
Jul 18 Python
用Python3创建httpServer的简单方法
Jun 04 Python
Python干货:分享Python绘制六种可视化图表
Aug 27 Python
python解析含有重复key的json方法
Jan 22 Python
python协程gevent案例 爬取斗鱼图片过程解析
Aug 27 Python
Python列表原理与用法详解【创建、元素增加、删除、访问、计数、切片、遍历等】
Oct 30 Python
基于python实现学生信息管理系统
Nov 22 Python
使用pyinstaller逆向.pyc文件
Dec 20 Python
Python2与Python3的区别详解
Feb 09 Python
Win 10下Anaconda虚拟环境的教程
May 18 Python
Python中zip函数如何使用
Jun 04 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
Feb 02 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
一个用于MySQL的PHP XML类
2006/10/09 PHP
PHP分页显示制作详细讲解
2006/10/09 PHP
十天学会php之第七天
2006/10/09 PHP
屏蔽浏览器缓存另类方法
2006/10/09 PHP
PHP产生随机字符串函数
2006/12/06 PHP
php 中的4种标记风格介绍
2012/05/10 PHP
Ecshop 后台添加新功能栏目及管理权限设置教程
2017/11/21 PHP
Laravel框架实现利用监听器进行sql语句记录功能
2018/06/06 PHP
JsEasy简介 JsEasy是什么?与下载
2007/03/07 Javascript
javascript replace()正则替换实现代码
2010/02/26 Javascript
网站接入QQ登录的两种方法
2014/07/22 Javascript
JavaScript基础知识学习笔记
2014/12/02 Javascript
浅谈JavaScript中指针和地址
2015/07/26 Javascript
jQuery实现折叠、展开的菜单组效果代码
2015/09/16 Javascript
常用的Javascript设计模式小结
2015/12/09 Javascript
用瀑布流的方式在网页上插入图片的简单实现方法
2016/09/23 Javascript
React中使用collections时key的重要性详解
2017/08/07 Javascript
详解js的作用域、预解析机制
2018/02/05 Javascript
微信小程序接入腾讯云验证码的方法步骤
2020/01/07 Javascript
JavaScript原型继承和原型链原理详解
2020/02/04 Javascript
python flask 多对多表查询功能
2017/06/25 Python
python爬虫实战之最简单的网页爬虫教程
2017/08/13 Python
Jupyter notebook无法导入第三方模块的解决方式
2020/04/15 Python
Python web如何在IIS发布应用过程解析
2020/05/27 Python
基于opencv的selenium滑动验证码的实现
2020/07/24 Python
纯css3制作的火影忍者写轮眼开眼至轮回眼及进化过程实例
2014/11/11 HTML / CSS
10个最常见的HTML5面试题 附答案
2016/06/06 HTML / CSS
全球摩托车装备领导者:RevZilla
2017/09/04 全球购物
美国正宗设计师眼镜在线零售商:EYEZZ
2019/03/23 全球购物
XD健身器材:Kevlar球、Crossfit健身球
2019/03/26 全球购物
Prototype如何为一个Ajax添加一个参数
2015/12/06 面试题
中专生自我鉴定
2013/12/17 职场文书
四风问题个人对照检查材料
2014/09/26 职场文书
2015年大学生入党自荐书
2015/03/24 职场文书
八年级作文之感恩
2019/11/22 职场文书
详解TypeScript中的类型保护
2021/04/29 Javascript