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将动态GIF图片倒放播放的方法
Nov 02 Python
Python实现的弹球小游戏示例
Aug 01 Python
10分钟教你用Python实现微信自动回复功能
Nov 28 Python
Python 实现中值滤波、均值滤波的方法
Jan 09 Python
python面向对象法实现图书管理系统
Apr 19 Python
python实现批量nii文件转换为png图像
Jul 18 Python
python rsa实现数据加密和解密、签名加密和验签功能
Sep 18 Python
如何基于python测量代码运行时间
Dec 25 Python
利用 Python ElementTree 生成 xml的实例
Mar 06 Python
django 解决扩展自带User表遇到的问题
May 14 Python
在Keras中实现保存和加载权重及模型结构
Jun 15 Python
详解pycharm2020.1.1专业版安装指南(推荐)
Aug 07 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中强制下载文件的代码(解决了IE下中文文件名乱码问题)
2011/05/09 PHP
PHP Global定义全局变量使用说明
2013/08/15 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
jQuery 判断元素上是否绑定了事件
2009/10/28 Javascript
页面载入结束自动调用js函数示例
2013/09/23 Javascript
jQuery中find()方法用法实例
2015/01/07 Javascript
js实现鼠标悬浮给图片加边框的方法
2015/01/30 Javascript
AngularJS 入门教程之HTML DOM实例详解
2016/07/28 Javascript
前端分页功能的实现以及原理(jQuery)
2017/01/22 Javascript
Vue.js实战之组件之间的数据传递
2017/04/01 Javascript
详解windows下vue-cli及webpack 构建网站(三)使用组件
2017/06/17 Javascript
在Vue.js中使用Mixins的方法
2017/09/12 Javascript
webpack实用小功能介绍
2018/01/02 Javascript
element-ui中el-upload多文件一次性上传的实现
2020/12/02 Javascript
[19:24]DOTA2客户端使用指南 一分钟快速设置轻松超神
2013/09/24 DOTA
[48:31]完美世界DOTA2联赛PWL S3 DLG vs Phoenix 第二场 12.17
2020/12/19 DOTA
python itchat实现微信自动回复的示例代码
2017/08/14 Python
Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法
2018/01/11 Python
Python读取图片为16进制表示简单代码
2018/01/19 Python
为什么选择python编程语言入门黑客攻防 给你几个理由!
2018/02/02 Python
python web基础之加载静态文件实例
2018/03/20 Python
python基于http下载视频或音频
2018/06/20 Python
学习Python列表的基础知识汇总
2020/03/10 Python
Django 解决阿里云部署同步数据库报错的问题
2020/05/14 Python
定义css设备类型-Media Queries图表简介及使用方法
2013/01/21 HTML / CSS
关于HTML5 Placeholder新标签低版本浏览器下不兼容的问题分析及解决办法
2016/01/27 HTML / CSS
PHP经典面试题
2016/09/03 面试题
J2EE的优越性主要表现在哪些方面
2016/03/28 面试题
物业经理求职自我评价
2013/09/22 职场文书
文秘自荐信
2013/10/20 职场文书
妇科医生自荐信
2013/11/05 职场文书
中国入世承诺
2014/04/01 职场文书
外贸采购员岗位职责
2015/04/03 职场文书
工程质量保证书
2015/05/09 职场文书
Python实战之大鱼吃小鱼游戏的实现
2022/04/01 Python
永中文档在线转换预览基于nginx配置部署方案
2022/06/10 Servers