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 正则表达式操作指南
May 04 Python
python为tornado添加recaptcha验证码功能
Feb 26 Python
PHP魔术方法__ISSET、__UNSET使用实例
Nov 25 Python
python打开url并按指定块读取网页内容的方法
Apr 29 Python
python获得一个月有多少天的方法
Jun 04 Python
Python基于回溯法解决01背包问题实例
Dec 06 Python
解决pycharm界面不能显示中文的问题
May 23 Python
PyTorch基本数据类型(一)
May 22 Python
基于Django静态资源部署404的解决方法
Jul 28 Python
Python Collatz序列实现过程解析
Oct 12 Python
解决Pytorch训练过程中loss不下降的问题
Jan 02 Python
Python日志器使用方法及原理解析
Sep 27 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 If Else(elsefi) 语句
2013/04/07 PHP
PHP编译安装中遇到的两个错误和解决方法
2014/08/20 PHP
PHP读取mssql json数据中文乱码的解决办法
2016/04/11 PHP
php图片添加水印例子
2016/07/20 PHP
PHP实现的登录页面信息提示功能示例
2017/07/24 PHP
php 删除一维数组中某一个值元素的操作方法
2018/02/01 PHP
php中字符串和整数比较的操作方法
2019/06/06 PHP
ASP 过滤数组重复数据函数(加强版)
2010/05/31 Javascript
Javascript继承机制的设计思想分享
2011/08/28 Javascript
JQuery each()函数如何优化循环DOM结构的性能
2012/12/10 Javascript
在easyUI开发中,出现jquery.easyui.min.js函数库问题的解决办法
2015/09/11 Javascript
ArtEditor富文本编辑器增加表单提交功能
2016/04/18 Javascript
javaScript手机号码校验工具类PhoneUtils详解
2017/12/08 Javascript
Angular使用cli生成自定义文件、组件的方法
2018/09/04 Javascript
Vue实现回到顶部和底部动画效果
2019/07/31 Javascript
[01:34]DOTA2 7.22版本新增神杖效果一览(敏捷英雄篇)
2019/05/28 DOTA
python网络编程之TCP通信实例和socketserver框架使用例子
2014/04/25 Python
python类和继承用法实例
2015/07/07 Python
python 网络编程常用代码段
2016/08/28 Python
浅谈python之自动化运维(Paramiko)
2020/01/31 Python
CSS3标注引用的出处和来源的方法
2020/02/25 HTML / CSS
土耳其玩具商店:Toyzz Shop
2019/08/02 全球购物
意大利时尚精品店:Nugnes 1920
2020/02/10 全球购物
应用电子技术专业个人求职信
2013/09/21 职场文书
个人自荐信
2013/12/05 职场文书
大学生职业生涯规划书模板
2014/01/18 职场文书
党委领导班子整改方案
2014/09/30 职场文书
党的群众路线教育实践活动对照检查剖析材料
2014/10/09 职场文书
党员干部反四风民主生活会对照检查材料思想汇报
2014/10/12 职场文书
中小学生学籍证明
2014/10/25 职场文书
公司借条范本
2015/05/25 职场文书
赡养老人协议书范本
2015/08/06 职场文书
用python删除文件夹中的重复图片(图片去重)
2021/05/12 Python
Python初识逻辑与if语句及用法大全
2021/08/07 Python
mysql性能优化以及配置连接参数设置
2022/05/06 MySQL
python区块链实现简版工作量证明
2022/05/25 Python