Python 模拟动态产生字母验证码图片功能


Posted in Python onDecember 24, 2019

模拟动态产生字母验证码图片

模拟生成验证码,首先要做的是生成随机的字母,然后对字母进行模糊处理。这里介绍一下 Python 提供的 Pillow 模块。

Pillow

PIL:Python Image Library,Python 的图像处理标准库,功能强大。

PIL 是第三方库,使用之前需要先进行安装。具体的命令如下:(如果安装了 Anaconda,这一步可以跳过)

$ pip install pillow

下面先简单介绍 Pillow 的功能。

操作图像

缩放图像,是 Pillow 的一个功能,示例如下:

from PIL import Image
# 打开图片,注意路径
img = Image.open('pitbull.jpeg')
# 获得图片尺寸
weight, height = img.size
print('原图片尺寸:{}x{}'.format(weight, height))
# 进行缩放,缩放 50%
img.thumbnail((weight//2, height//2))
print('调整后的图片尺寸:{}x{}'.format(weight//2, height//2))
# 将缩放后的图片保存
img.save('thumbnail.jpg', 'jpeg')

Pillow 还有其他的功能,例如旋转,剪切,滤镜,输出文字,调色板等。

ImageFilter

下面尝试模糊图片处理:

from PIL import Image,ImageFilter
# 打开图片文件,注意路径
img = Image.open('pitbull.jpeg')
# 应用模糊滤镜
img2 = img.filter(ImageFilter.BLUR)
img2.save('blur.jpg', 'jpeg')

ImageFilter 是 Python 提供的图像滤波,而 ImageFilter.BLUR 是模糊滤波。

上面代码具体的效果如下:

Python 模拟动态产生字母验证码图片功能Python 模拟动态产生字母验证码图片功能

同时 Pillow 的 ImageDraw 提供了一些列绘图方法,使我们可以直接绘图。下面使用这种方法来尝试生成字母验证码图片:

from PIL import Image, ImageDraw, ImageFont, ImageFilter
from random import randint
def random_char():
  '''
  生成随机的字母
  Returns:
    返回随机的字母
  '''
  return chr(randint(65, 90))
def random_color():
  '''
  生成随机颜色,每个颜色值在 64-255 之间
  Returns:
    返回随机的颜色,返回值的类型为 tuple.例如:(65, 98, 243)
  '''
  return (randint(64, 255), randint(64, 255), randint(64, 255),)
def random_color_2():
  '''
  生成随机颜色,每个颜色值在 32- 127 之间
  Returns:
    返回随机颜色,返回值类型为 tuple.例如(33, 87, 121)
  '''
  return (randint(32, 127), randint(32, 127), randint(32, 127),)
# 生成的图片比例
width = 60 * 4
height = 60
image = Image.new('RGB', (width, height), (255, 255, 255))
# 创建 Font 对象
font = ImageFont.truetype('YaHeiConsolas.ttf', 36)
# 创建 Draw 对象
draw = ImageDraw.Draw(image)
# 填充每个像素
for x in range(width):
  for y in range(height):
    draw.point((x, y), fill=random_color())
# 输出字母
for t in range(4):
  draw.text((60 * t + 10, 10), random_char(), font=font, fill=random_color_2())
# 对生成的字母进行模糊效果处理
image = image.filter(ImageFilter.BLUR)
image.save('code.jpg', 'jpeg')

代码具体实现过程是,先用随机颜色填充背景,再生成字母,最后对图片进行模糊处理。具体实现效果如下:

Python 模拟动态产生字母验证码图片功能

代码在运行的过程中,可能会出现下面的错误:

IOError: cannot open resourse

出现这个问题的原因是 PIL 无法定位到字体文件的位置,可以考虑直接提供绝对位置。

font = ImageFont.truetype('/absolute/path/font.ttf', 36)

本篇文章提及的 Pillow 仅是简单的部分功能,如果要继续了解 PIL 的强大功能,可以参考 Pillow 官方文档:

https://pillow.readthedocs.org/

总结

以上所述是小编给大家介绍的Python 模拟动态产生字母验证码图片功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python模拟登录百度代码分享(获取百度贴吧等级)
Dec 27 Python
Python中使用语句导入模块或包的机制研究
Mar 30 Python
使用Python来编写HTTP服务器的超级指南
Feb 18 Python
Python操作使用MySQL数据库的实例代码
May 25 Python
Python DataFrame 设置输出不显示index(索引)值的方法
Jun 07 Python
python实现简易数码时钟
Feb 19 Python
关于python 的legend图例,参数使用说明
Apr 17 Python
Python如何将函数值赋给变量
Apr 28 Python
浅谈pytorch中torch.max和F.softmax函数的维度解释
Jun 28 Python
python re模块常见用法例举
Mar 01 Python
python抢购软件/插件/脚本附完整源码
Mar 04 Python
python数据库批量插入数据的实现(executemany的使用)
Apr 30 Python
python中return的返回和执行实例
Dec 24 #Python
Python文件操作函数用法实例详解
Dec 24 #Python
Python的形参和实参使用方式
Dec 24 #Python
python接口自动化如何封装获取常量的类
Dec 24 #Python
使用PyOpenGL绘制三维坐标系实例
Dec 24 #Python
Python 限定函数参数的类型及默认值方式
Dec 24 #Python
python+opencv实现车牌定位功能(实例代码)
Dec 24 #Python
You might like
PHP中实现图片的锐化
2006/10/09 PHP
php 页面执行时间计算代码
2008/12/04 PHP
php IP及IP段进行访问限制的代码
2008/12/17 PHP
PHP中实现中文字符进制转换原理分析
2011/12/06 PHP
php文件扩展名判断及获取文件扩展名的N种方法
2015/09/12 PHP
smarty中改进truncate使其支持中文的方法
2016/05/30 PHP
php+redis实现注册、删除、编辑、分页、登录、关注等功能示例
2017/02/15 PHP
js控制网页背景音乐播放与停止的方法
2015/02/06 Javascript
推荐10 个很棒的 jQuery 特效代码
2015/10/04 Javascript
BootStrap响应式导航条实例介绍
2016/05/06 Javascript
老生常谈 关于JavaScript的类的继承
2016/06/24 Javascript
基于touch.js手势库+zepto.js插件开发图片查看器(滑动、缩放、双击缩放)
2016/11/17 Javascript
基于javascript实现的快速排序
2016/12/02 Javascript
使用JS在浏览器中判断当前网络连接状态的几种方法
2017/05/05 Javascript
w3c编程挑战_初级脚本算法实战篇
2017/06/23 Javascript
BetterScroll 在移动端滚动场景的应用
2017/09/18 Javascript
node基于puppeteer模拟登录抓取页面的实现
2018/05/09 Javascript
配置eslint规范项目代码风格
2019/03/11 Javascript
vue 实现动态路由的方法
2020/07/06 Javascript
[52:20]VP vs VG Supermajor小组赛 B组胜者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
Python判断列表是否已排序的各种方法及其性能分析
2016/06/20 Python
Python实现定时任务
2017/02/08 Python
Python基于opencv的图像压缩算法实例分析
2018/05/03 Python
解决python大批量读写.doc文件的问题
2018/05/08 Python
python实现决策树分类(2)
2018/08/30 Python
Python利用scapy实现ARP欺骗的方法
2019/07/23 Python
pyinstaller打包opencv和numpy程序运行错误解决
2019/08/16 Python
linux环境下安装python虚拟环境及注意事项
2020/01/07 Python
html5 application cache遇到的严重问题
2012/12/26 HTML / CSS
碧欧泉Biotherm加拿大官方网站:法国高端护肤品牌
2019/10/18 全球购物
Java的基础面试题附答案
2016/01/10 面试题
2014年化验室工作总结
2014/11/21 职场文书
建国大业观后感600字
2015/06/01 职场文书
冲出亚马逊观后感
2015/06/03 职场文书
2017寒假社会实践心得体会范文
2016/01/14 职场文书
python实战之90行代码写个猜数字游戏
2021/04/22 Python