这里示范的验证码都是简单的,你也可以把字符扭曲

Python第三方库无比强大,PIL 是python的一个d第三方图片处理模块,我们也可以使用它来生成图片验证码
PIL安装
命令安装:
pip install pillow
下载源码安装:
复制地址 :https://github.com/python-pillow/Pillow
PIL使用
例子:生成图片,并填充文字
#!/usr/bin/python
#-*-coding:utf-8-*-
from PIL import Image, ImageDraw, ImageFont, ImageFilter
# 实例一个图片对象240 x 60:
width = 60 * 4
height = 60
# 图片颜色
clo = (43, 34, 88) # 我觉得是紫蓝色
image = Image.new('RGB', (width, height), clo)
# 创建Font对象:
# 字体文件可以使用操作系统的,也可以网上下载
font = ImageFont.truetype('./font/Arial.ttf', 36)
# 创建Draw对象:
draw = ImageDraw.Draw(image)
# 输出文字:
str1 = "ren ren Python"
w = 4 #距离图片左边距离
h = 10 #距离图片上边距离
draw.text((w, h), str1, font=font)
# 模糊:
image.filter(ImageFilter.BLUR)
code_name = 'test_code_img.jpg'
save_dir = './{}'.format(code_name)
image.save(save_dir, 'jpeg')
print("已保存图片: {}".format(save_dir))
(venv) allenwoo@~/renren/code$ python test2.py 已保存图片: ./test_code_img.jpg
图片如下:
文字没有什么色彩,我们也可以加上颜色,只需要在 text 中传人 fill 参数就好
draw.text((w, h), str1, font=font, fill = (78, 64, 65))
随便加的颜色
我们还可以把背景弄成很多个小点,每隔n隔像素填充个其他颜色比如:
#!/usr/bin/python
#-*-coding:utf-8-*-
from PIL import Image, ImageDraw, ImageFont, ImageFilter
# 实例一个图片对象240 x 60:
width = 60 * 4
height = 60
# 图片颜色
clo = (43, 34, 88) # 我觉得是紫蓝色
image = Image.new('RGB', (width, height), clo)
# 创建Font对象:
# 字体文件可以使用操作系统的,也可以网上下载
font = ImageFont.truetype('./font/Arial.ttf', 36)
# 创建Draw对象:
draw = ImageDraw.Draw(image)
# 填充像素:
# 宽每隔 20, 高每隔5, 形成坐标x,y
# 红色:220,20,60
for x in range(0, width, 20):
for y in range(0, height, 5):
draw.point((x, y), fill=(220, 20, 60))
# 输出文字:
str1 = "we are renren"
w = 4 #距离图片左边距离
h = 10 #距离图片上边距离
draw.text((w, h), str1, font=font, fill = (78, 64, 65))
# 模糊:
image.filter(ImageFilter.BLUR)
code_name = 'test_code_img.jpg'
save_dir = './{}'.format(code_name)
image.save(save_dir, 'jpeg')
print("已保存图片: {}".format(save_dir))
结果图片:
PIL制作验证码
利用以上这些,还有我们之前学习的随机生成器random就可以做个验证码了,
生成验证码代码
#!/usr/bin/python
#-*-coding:utf-8-*-
from uuid import uuid1
from PIL import Image, ImageDraw, ImageFont, ImageFilter
import random
def rnd_char():
'''
随机一个字母或者数字
:return:
'''
# 随机一个字母或者数字
i = random.randint(1,3)
if i == 1:
# 随机个数字的十进制ASCII码
an = random.randint(97, 122)
elif i == 2:
# 随机个小写字母的十进制ASCII码
an = random.randint(65, 90)
else:
# 随机个大写字母的十进制ASCII码
an = random.randint(48, 57)
# 根据Ascii码转成字符,return回去
return chr(an)
# 干扰
def rnd_dis():
'''
随机一个干扰字
:return:
'''
d = ['^','-', '~', '_', '.']
i = random.randint(0, len(d)-1)
return d[i]
# 两个随机颜色都规定不同的区域,防止干扰字符和验证码字符颜色一样
# 随机颜色1:
def rnd_color():
'''
随机颜色,规定一定范围
:return:
'''
return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255))
# 随机颜色2:
def rnd_color2():
'''
随机颜色,规定一定范围
:return:
'''
return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127))
def create_code():
# 240 x 60:
width = 60 * 4
height = 60
image = Image.new('RGB', (width, height), (192, 192, 192))
# 创建Font对象:
font = ImageFont.truetype('./font/Arial.ttf', 36)
# 创建Draw对象:
draw = ImageDraw.Draw(image)
# 填充每个像素:
for x in range(0, width, 20):
for y in range(0, height, 10):
draw.point((x, y), fill=rnd_color())
# 填充字符
_str = ""
# 填入4个随机的数字或字母作为验证码
for t in range(4):
c = rnd_char()
_str = "{}{}".format(_str, c)
# 随机距离图片上边高度,但至少距离30像素
h = random.randint(1, height-30)
# 宽度的化,每个字符占图片宽度1/4,在加上10个像素空隙
w = width/4 * t + 10
draw.text((w, h), c, font=font, fill=rnd_color2())
# 实际项目中,会将验证码 保存在数据库,并加上时间字段
print("保存验证码 {} 到数据库".format(_str))
# 给图片加上字符干扰,密集度由 w, h控制
for j in range(0, width, 30):
dis = rnd_dis()
w = t * 15 + j
# 随机距离图片上边高度,但至少距离30像素
h = random.randint(1, height - 30)
draw.text((w, h), dis, font=font, fill=rndColor())
# 模糊:
image.filter(ImageFilter.BLUR)
# uuid1 生成唯一的字符串作为验证码图片名称
code_name = '{}.jpg'.format(uuid1())
save_dir = './{}'.format(code_name)
image.save(save_dir, 'jpeg')
print("已保存图片: {}".format(save_dir))
# 当直接运行文件的是和,运行下面代码
if __name__ == "__main__":
create_code()
(venv) allenwoo@~/renren/code$ python test.py 保存验证码 ef3k 到数据库 已保存图片: ./c86e03c0-1c23-11e7-999d-f45c89c09e61.jpg (venv) allenwoo@~/renren/code$ python test.py 保存验证码 I37X 到数据库 已保存图片: ./cb8aed02-1c23-11e7-9b18-f45c89c09e61.jpg (venv) allenwoo@~/renren/code$ python test.py 保存验证码 vVL1 到数据库 已保存图片: ./cc120da8-1c23-11e7-b762-f45c89c09e61.jpg (venv) allenwoo@~/renren/code$ python test.py 保存验证码 K6w3 到数据库 已保存图片: ./cc891e05-1c23-11e7-b7ec-f45c89c09e61.jpg
你觉得难不难呢?最后这个生成验证码代码中有些逻辑问题要理解下
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Python图片验证码
# Python
# 验证码
# python识别图片验证码
# python 图片验证码代码
# python 图片验证码代码分享
# python生成验证码图片代码分享
# python使用pil生成图片验证码的方法
# Python使用PIL库实现验证码图片的方法
# python图片验证码生成代码
# python3 pillow生成简单验证码图片的示例
# 在Python web中实现验证码图片代码分享
# 利用Python破解验证码实例详解
# Python实现破解12306图片验证码的方法分析
# 可以使用
# 每隔
# 我觉得
# 第三方
# 的是
# 都是
# 操作系统
# 还可以
# 就好
# 网上
# 只需
# 要在
# 没有什么
# 但至少
# 做个
# 你觉得
# 会将
# 你也可以
# 它来
相关文章:
武清网站制作公司,天津武清个人营业执照注销查询系统网站?
制作宣传网站的软件,小红书可以宣传网站吗?
如何选择CMS系统实现快速建站与SEO优化?
如何快速搭建高效服务器建站系统?
免费网站制作appp,免费制作app哪个平台好?
如何快速选择适合个人网站的云服务器配置?
详解jQuery停止动画——stop()方法的使用
建站之星如何实现网站加密操作?
家具网站制作软件,家具厂怎么跑业务?
C#怎么创建控制台应用 C# Console App项目创建方法
简历在线制作网站免费版,如何创建个人简历?
西安专业网站制作公司有哪些,陕西省建行官方网站?
如何快速搭建安全的FTP站点?
枣阳网站制作,阳新火车站打的到仙岛湖多少钱?
建站主机如何选?性能与价格怎样平衡?
网站按钮制作软件,如何实现网页中按钮的自动点击?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
大学网站设计制作软件有哪些,如何将网站制作成自己app?
Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解
韩国服务器如何优化跨境访问实现高效连接?
网站图片在线制作软件,怎么在图片上做链接?
如何在橙子建站中快速调整背景颜色?
如何用狗爹虚拟主机快速搭建网站?
学校建站服务器如何选型才能满足性能需求?
如何彻底卸载建站之星软件?
如何使用Golang安装API文档生成工具_快速生成接口文档
如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本
教程网站设计制作软件,怎么创建自己的一个网站?
如何自定义建站之星网站的导航菜单样式?
c# 在ASP.NET Core中管理和取消后台任务
建站VPS选购需注意哪些关键参数?
导航网站建站方案与优化指南:一站式高效搭建技巧解析
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
网站好制作吗知乎,网站开发好学吗?有什么技巧?
定制建站流程步骤详解:一站式方案设计与开发指南
制作农业网站的软件,比较好的农业网站推荐一下?
如何将凡科建站内容保存为本地文件?
建站DNS解析失败?如何正确配置域名服务器?
一键网站制作软件,义乌购一件代发流程?
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
北京建设网站制作公司,北京古代建筑博物馆预约官网?
微信推文制作网站有哪些,怎么做微信推文,急?
建站之星如何实现五合一智能建站与营销推广?
如何选择PHP开源工具快速搭建网站?
宝盒自助建站智能生成技巧:SEO优化与关键词设置指南
如何撰写建站申请书?关键要点有哪些?
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
如何快速生成可下载的建站源码工具?
建站OpenVZ教程与优化策略:配置指南与性能提升
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
*请认真填写需求信息,我们会在24小时内与您取得联系。