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编写的微博应用
Oct 17 Python
win10环境下python3.5安装步骤图文教程
Feb 03 Python
python之Character string(实例讲解)
Sep 25 Python
Python中的asyncio代码详解
Jun 10 Python
python按键按住不放持续响应的实例代码
Jul 17 Python
python如何统计代码运行的时长
Jul 24 Python
Python使用scrapy爬取阳光热线问政平台过程解析
Aug 14 Python
python框架flask表单实现详解
Nov 04 Python
django xadmin 管理器常用显示设置方式
Mar 11 Python
PHP基于phpqrcode类库生成二维码过程解析
May 28 Python
python实现网页录音效果
Oct 26 Python
Python OpenCV中的numpy与图像类型转换操作
Dec 11 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
实用函数5
2007/11/08 PHP
php入门学习知识点六 PHP文件的读写操作代码
2011/07/14 PHP
解决ThinkPHP关闭调试模式时报错的问题汇总
2015/04/22 PHP
php基于CodeIgniter实现图片上传、剪切功能
2016/05/14 PHP
PHP 数组黑名单/白名单实例代码详解
2019/06/04 PHP
PHP程序员简单的开展服务治理架构操作详解(三)
2020/05/14 PHP
FireFox与IE 下js兼容触发click事件的代码
2008/11/20 Javascript
Javascript 解疑
2009/11/11 Javascript
jQuery源码分析-04 选择器-Sizzle-工作原理分析
2011/11/14 Javascript
浅谈JavaScript Math和Number对象
2015/01/26 Javascript
js时钟翻牌效果实现代码分享
2020/07/31 Javascript
JavaScript模块规范之AMD规范和CMD规范
2015/10/27 Javascript
解析Vue2.0双向绑定实现原理
2017/02/23 Javascript
js学习总结之DOM2兼容处理顺序问题的解决方法
2017/07/27 Javascript
在Vue-cli里应用Vuex的state和mutations方法
2018/09/16 Javascript
详解vue中this.$emit()的返回值是什么
2019/04/07 Javascript
原生js+canvas实现贪吃蛇效果
2020/08/02 Javascript
零基础写python爬虫之使用urllib2组件抓取网页内容
2014/11/04 Python
Python continue继续循环用法总结
2018/06/10 Python
python交互界面的退出方法
2019/02/16 Python
pandas对dataFrame中某一个列的数据进行处理的方法
2019/07/08 Python
如何基于pythonnet调用halcon脚本
2020/01/20 Python
python小程序之4名牌手洗牌发牌问题解析
2020/05/15 Python
python爬虫可以爬什么
2020/06/16 Python
keras在构建LSTM模型时对变长序列的处理操作
2020/06/29 Python
Django-simple-captcha验证码包使用方法详解
2020/11/28 Python
纯HTML+CSS3制作导航菜单(附源码)
2013/04/24 HTML / CSS
基于HTML5 Canvas 实现弹出框效果
2017/06/05 HTML / CSS
体育教育个人自荐信范文
2013/12/01 职场文书
社区志愿者心得体会
2014/01/03 职场文书
新护士岗前培训制度
2014/02/02 职场文书
建筑安全标语
2014/06/07 职场文书
乡文化站暑期培训方案
2014/08/28 职场文书
公司规章制度范本
2015/08/03 职场文书
logback如何自定义日志存储
2021/08/30 Java/Android
使用CSS定位HTML元素的实现方法
2022/07/07 HTML / CSS