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解析json文件相关知识学习
Mar 01 Python
python机器学习理论与实战(六)支持向量机
Jan 19 Python
基于python 处理中文路径的终极解决方法
Apr 12 Python
在matplotlib的图中设置中文标签的方法
Dec 13 Python
Python类的继承、多态及获取对象信息操作详解
Feb 28 Python
Python高级特性与几种函数的讲解
Mar 08 Python
对python3.4 字符串转16进制的实例详解
Jun 12 Python
基于python的BP神经网络及异或实现过程解析
Sep 30 Python
python with语句的原理与用法详解
Mar 30 Python
Django中的AutoField字段使用
May 18 Python
Python计算矩阵的和积的实例详解
Sep 10 Python
Python基于百度AI实现抓取表情包
Jun 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实例分享之二维数组排序
2014/05/15 PHP
C#静态方法与非静态方法实例分析
2014/09/22 PHP
php截取指定2个字符之间字符串的方法
2015/04/15 PHP
PHP时间类完整实例(非常实用)
2015/12/25 PHP
PHP模板引擎Smarty内建函数section,sectionelse用法详解
2016/04/11 PHP
微信网页授权(OAuth2.0) PHP 源码简单实现
2016/08/29 PHP
PHP聊天室简单实现方法详解
2018/12/08 PHP
PHP反射基础知识回顾
2020/09/10 PHP
可以显示单图片,多图片ajax请求的ThickBox3.1类下载
2007/12/23 Javascript
Jquery时间验证和转换工具小例子
2013/07/01 Javascript
nodeType属性返回被选节点的节点类型介绍
2013/11/22 Javascript
jquery $.trim()方法使用介绍
2014/05/21 Javascript
3种js实现string的substring方法
2015/11/09 Javascript
限制复选框最多选择项的实现代码
2016/05/30 Javascript
js注入 黑客之路必备!
2016/09/14 Javascript
Bootstrap里的文件分别代表什么意思及其引用方法
2017/05/01 Javascript
vue2.0多条件搜索组件使用详解
2020/03/26 Javascript
mui开发中获取单选按钮、复选框的值(实例讲解)
2017/07/24 Javascript
基于jQuery解决ios10以上版本缩放问题
2017/11/03 jQuery
Node.js API详解之 Error模块用法实例分析
2020/05/14 Javascript
Python中print和return的作用及区别解析
2019/05/05 Python
Python对接 xray 和微信实现自动告警
2019/09/17 Python
Windows10下Tensorflow2.0 安装及环境配置教程(图文)
2019/11/21 Python
python GUI库图形界面开发之PyQt5滑块条控件QSlider详细使用方法与实例
2020/02/28 Python
html5 乒乓球(碰撞检测)实例二
2013/07/25 HTML / CSS
Blue Nile中国官网:全球知名的钻石和珠宝网络零售商
2020/03/22 全球购物
第二层交换机和路由器的区别?第三层交换机和路由器的区别?
2013/05/23 面试题
StringBuilder和String的区别
2015/05/18 面试题
办公室文秘岗位职责
2013/11/15 职场文书
车间操作工岗位职责
2013/12/19 职场文书
招聘单位介绍信
2014/01/14 职场文书
安全教育演讲稿
2014/05/09 职场文书
2014年结对帮扶工作总结
2014/12/17 职场文书
工作推荐信模板
2015/03/25 职场文书
物业工程部经理岗位职责
2015/04/09 职场文书
25张裸眼3D图片,带你重温童年的记忆,感受3D的魅力
2022/02/06 杂记