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的类变量和成员变量用法实例教程
Aug 25 Python
Python实现的简单模板引擎功能示例
Sep 02 Python
python网络爬虫之如何伪装逃过反爬虫程序的方法
Nov 23 Python
学习python中matplotlib绘图设置坐标轴刻度、文本
Feb 07 Python
Django实现全文检索的方法(支持中文)
May 14 Python
TensorFlow用expand_dim()来增加维度的方法
Jul 26 Python
基于django channel实现websocket的聊天室的方法示例
Apr 11 Python
python自定义函数实现最大值的输出方法
Jul 09 Python
Python爬虫爬取Bilibili弹幕过程解析
Oct 10 Python
Pytorch中index_select() 函数的实现理解
Nov 19 Python
python GUI库图形界面开发之PyQt5访问系统剪切板QClipboard类详细使用方法与实例
Feb 27 Python
Pycharm中如何关掉python console
Oct 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
php5编程中的异常处理详细方法介绍
2008/07/29 PHP
PHP 事务处理数据实现代码
2010/05/13 PHP
用PHP读取超大文件的实例代码
2012/04/01 PHP
php简单的留言板与回复功能具体实现
2014/02/19 PHP
PHP高级编程实例:编写守护进程
2014/09/02 PHP
详细解读php的命名空间(二)
2018/02/21 PHP
thinkPHP5框架路由常用知识点汇总
2019/09/15 PHP
一步一步制作jquery插件Tabs实现过程
2010/07/06 Javascript
javascript学习笔记(五)正则表达式
2011/04/08 Javascript
滚动图片效果 jquery实现回旋滚动效果
2013/01/08 Javascript
基于socket.io和node.js搭建即时通信系统
2014/07/30 Javascript
jQuery实现购物车表单自动结算效果实例
2015/08/10 Javascript
学习javascript面向对象 javascript实现继承的方式
2016/01/04 Javascript
AngularJS 表达式详细讲解及实例代码
2016/07/26 Javascript
在JS中a标签加入单击事件屏蔽href跳转页面
2016/12/16 Javascript
详解Vue中组件的缓存
2019/04/20 Javascript
[01:11:48]Fnatic vs IG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
[01:05:07]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第一场2月1日
2021/03/11 DOTA
Python中使用logging模块打印log日志详解
2015/04/05 Python
Python实现的下载网页源码功能示例
2017/06/13 Python
Python OpenCV实现视频分帧
2019/06/01 Python
Python实现EXCEL表格的排序功能示例
2019/06/25 Python
英国Zoro工具:手动工具,电动工具和个人防护用品
2016/11/02 全球购物
size?丹麦官网:英国伦敦的球鞋精品店
2019/04/15 全球购物
英国莱斯特松木橡木家具网上商店:Choice Furniture Superstore
2019/07/05 全球购物
英国排名第一的餐具品牌:Denby Pottery
2019/11/01 全球购物
求职信模板标准格式范文
2014/02/23 职场文书
《吃水不忘挖井人》教学反思
2014/04/15 职场文书
党日活动总结
2014/05/07 职场文书
商务经理岗位职责
2014/07/30 职场文书
教师职业道德事迹材料
2014/08/18 职场文书
初三毕业评语
2014/12/26 职场文书
优秀家长事迹材料(2016推荐版)
2016/02/29 职场文书
来探秘“德国中小企业”的成功之道
2019/07/26 职场文书
MySQL基础(一)
2021/04/05 MySQL
Go获取两个时区的时间差
2022/04/20 Golang