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中的正则表达式的用法
Apr 09 Python
Python中Django框架下的staticfiles使用简介
May 30 Python
Python中__init__.py文件的作用详解
Sep 18 Python
Python heapq使用详解及实例代码
Jan 25 Python
python和opencv实现抠图
Jul 18 Python
python虚拟环境迁移方法
Jan 03 Python
python django model联合主键的例子
Aug 06 Python
python3实现单目标粒子群算法
Nov 14 Python
利用python汇总统计多张Excel
Sep 22 Python
Python中相见恨晚的技巧
Apr 13 Python
Python基础教程,Python入门教程(超详细)
Jun 24 Python
PYTHON 使用 Pandas 删除某列指定值所在的行
Apr 28 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
IIS安装Apache伪静态插件的具体操作图文
2013/07/01 PHP
神盾加密解密教程(二)PHP 神盾解密
2014/06/08 PHP
PHP进程同步代码实例
2015/02/12 PHP
PHP Warning: Module 'modulename' already loaded in问题解决办法
2015/03/16 PHP
ThinkPHP V2.2说明文档没有说明的那些事实例小结
2015/07/01 PHP
js中字符替换函数String.replace()使用技巧
2011/08/14 Javascript
jQuery中[attribute=value]选择器用法实例
2014/12/31 Javascript
jQuery实现鼠标划过展示大图的方法
2015/03/09 Javascript
jQuery+css3动画属性制作猎豹浏览器宽屏banner焦点图
2015/03/16 Javascript
js字符串截取函数slice、substring和substr的比较
2016/05/17 Javascript
深入分析node.js的异步API和其局限性
2016/09/05 Javascript
让html元素随浏览器的大小自适应垂直居中的实现方法
2016/10/12 Javascript
JS实现简易刻度时钟示例代码
2017/03/11 Javascript
JS去掉字符串前后空格或去掉所有空格的用法
2017/03/25 Javascript
node.JS md5加密中文与php结果不一致的解决方法
2017/05/05 Javascript
Vue+Jwt+SpringBoot+Ldap完成登录认证的示例代码
2018/05/21 Javascript
node中间层实现文件上传功能
2018/06/11 Javascript
layui实现给某一列加点击事件
2019/10/26 Javascript
打印出python 当前全局变量和入口参数的所有属性
2009/07/01 Python
python列表操作使用示例分享
2014/02/21 Python
我用Python抓取了7000 多本电子书案例详解
2019/03/25 Python
python 猴子补丁(monkey patch)
2019/06/26 Python
pow在python中的含义及用法
2019/07/11 Python
Python操作Mongodb数据库的方法小结
2019/09/10 Python
Python 日期的转换及计算的具体使用详解
2020/01/16 Python
使用tensorflow DataSet实现高效加载变长文本输入
2020/01/20 Python
python 函数中的参数类型
2020/02/11 Python
快速解决jupyter启动卡死的问题
2020/04/10 Python
Python爬取你好李焕英豆瓣短评生成词云的示例代码
2021/02/24 Python
美国廉价机票预订网站:Cheapfaremart
2018/04/28 全球购物
Chemist Warehouse中文网:澳洲连锁大药房
2021/02/05 全球购物
应届生新闻编辑求职信
2013/11/19 职场文书
致百米运动员广播稿5篇
2014/10/13 职场文书
每日六道java新手入门面试题,通往自由的道路
2021/06/30 Java/Android
MySQL实现配置主从复制项目实践
2022/03/31 MySQL
python​格式化字符串
2022/04/20 Python