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实现方法
Nov 27 Python
python正则实现提取电话功能
Feb 24 Python
python 查找文件名包含指定字符串的方法
Jun 05 Python
对python遍历文件夹中的所有jpg文件的实例详解
Dec 08 Python
基于树莓派的语音对话机器人
Jun 17 Python
python绘制规则网络图形实例
Dec 09 Python
python中property和setter装饰器用法
Dec 19 Python
python yield和Generator函数用法详解
Feb 10 Python
Python 中的pygame安装与配置教程详解
Feb 10 Python
在pycharm中使用matplotlib.pyplot 绘图时报错的解决
Jun 01 Python
Python数据模型与Python对象模型的相关总结
Jan 26 Python
python 实现mysql自动增删分区的方法
Apr 01 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 调试工具Debug Tools
2011/04/30 PHP
实例讲解yii2.0在php命令行中运行的步骤
2015/12/01 PHP
完美利用Yii2微信后台开发的系列总结
2016/07/18 PHP
PHP实现更改hosts文件的方法示例
2017/08/08 PHP
php解决安全问题的方法实例
2019/09/19 PHP
php操作redis命令及代码实例大全
2020/11/19 PHP
js可突破windows弹退效果代码
2008/08/09 Javascript
JS 无限级 Select效果实现代码(json格式)
2011/08/30 Javascript
jquery 鼠标滑动显示详情应用示例
2014/01/24 Javascript
JavaScript定时显示广告代码分享
2015/03/02 Javascript
JS实现获取当前URL和来源URL的方法
2016/08/24 Javascript
使用JS代码实现点击按钮下载文件
2016/11/12 Javascript
激动人心的 Angular HttpClient的源码解析
2017/07/10 Javascript
如何理解Vue的render函数的具体用法
2017/08/30 Javascript
微信小程序中实现手指缩放图片的示例代码
2018/03/13 Javascript
[03:51]吞吞映像 每周精彩击杀top10第二弹
2014/06/25 DOTA
使用graphics.py实现2048小游戏
2015/03/10 Python
Python多线程爬虫简单示例
2016/03/04 Python
django 创建过滤器的实例详解
2017/08/14 Python
Python实现获取照片拍摄日期并重命名的方法
2017/09/30 Python
python 3调用百度OCR API实现剪贴板文字识别
2018/09/04 Python
python实现串口自动触发工作的示例
2019/07/02 Python
在django中使用post方法时,需要增加csrftoken的例子
2020/03/13 Python
Python中操作各种多媒体,视频、音频到图片的代码详解
2020/06/04 Python
让IE下支持Html5的placeholder属性的插件
2014/09/02 HTML / CSS
加拿大女装网上购物:Reitmans
2016/10/20 全球购物
经理职责范文
2013/11/08 职场文书
4s客服专员岗位职责
2013/12/01 职场文书
小学新教师培训方案
2014/02/03 职场文书
幼儿园中秋节活动反思
2014/02/16 职场文书
诉前财产保全担保书
2014/05/20 职场文书
铅球加油稿100字
2014/09/26 职场文书
2015年五四青年节活动总结
2015/02/10 职场文书
会计求职简历自我评价
2015/03/10 职场文书
个人业务学习心得体会
2016/01/25 职场文书
Java 超详细讲解hashCode方法
2022/04/07 Java/Android