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 相关文章推荐
记录Django开发心得
Jul 16 Python
python有证书的加密解密实现方法
Nov 19 Python
在RedHat系Linux上部署Python的Celery框架的教程
Apr 07 Python
Python爬虫实现百度图片自动下载
Feb 04 Python
Python读写/追加excel文件Demo分享
May 03 Python
numpy返回array中元素的index方法
Jun 27 Python
Django框架用户注销功能实现方法分析
May 28 Python
python操作文件的参数整理
Jun 11 Python
python读写csv文件实例代码
Jul 05 Python
Python3操作Excel文件(读写)的简单实例
Sep 02 Python
解决python DataFrame 打印结果不换行问题
Apr 09 Python
python录音并调用百度语音识别接口的示例
Dec 01 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 写文本日志实现代码
2010/05/18 PHP
php 智能404跳转代码,适合换域名没改变目录的网站
2010/06/04 PHP
PHP下判断网址是否有效的代码
2011/10/08 PHP
php数据库配置文件一般做法分享
2012/07/07 PHP
php多任务程序实例解析
2014/07/19 PHP
WordPress导航菜单的滚动和淡入淡出效果的实现要点
2015/12/14 PHP
javascript编程起步(第七课)
2007/01/10 Javascript
jquery多浏览器捕捉回车事件代码
2010/06/22 Javascript
鼠标经过tr时,改变tr当前背景颜色
2014/01/13 Javascript
js实现横向伸展开的二级导航菜单代码
2015/08/28 Javascript
javascript学习小结之prototype
2015/12/03 Javascript
js将滚动条滚动到指定位置的简单实现方法
2016/06/25 Javascript
微信小程序 picker-view 组件详解及简单实例
2017/01/10 Javascript
Angular中使用MathJax遇到的一些问题
2017/12/15 Javascript
浅谈SpringMVC中post checkbox 多选框value的值(隐藏域方式)
2018/01/08 Javascript
vue单页开发父子组件传值思路详解
2018/05/18 Javascript
JS伪继承prototype实现方法示例
2018/06/20 Javascript
Vue监听数据渲染DOM完以后执行某个函数详解
2018/09/11 Javascript
微信公众平台 发送模板消息(Java接口开发)
2019/04/17 Javascript
一文了解vue-router之hash模式和history模式
2019/05/31 Javascript
微信小程序 自定义复选框实现代码实例
2019/09/04 Javascript
Python中的zip函数使用示例
2015/01/29 Python
Python+Selenium自动化实现分页(pagination)处理
2017/03/31 Python
Python设计模式之工厂模式简单示例
2018/01/09 Python
python 重定向获取真实url的方法
2018/05/11 Python
python用pandas数据加载、存储与文件格式的实例
2018/12/07 Python
Python文件名匹配与文件复制的实现
2020/12/11 Python
中医药大学毕业生自荐信
2013/11/08 职场文书
自主招生自荐信指南
2014/02/04 职场文书
大学生简短的自我评价
2014/09/12 职场文书
2014年学校法制宣传日活动总结
2014/11/01 职场文书
五四青年节比赛演讲稿
2015/03/18 职场文书
2015年房地产销售工作总结
2015/04/20 职场文书
写给媳妇的检讨书
2015/05/06 职场文书
人生遥控器观后感
2015/06/11 职场文书
高中英语教学反思范文
2016/03/02 职场文书