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封装shell命令实例分析
May 05 Python
python获得文件创建时间和修改时间的方法
Jun 30 Python
python 开发的三种运行模式详细介绍
Jan 18 Python
Python实现简单过滤文本段的方法
May 24 Python
python取代netcat过程分析
Feb 10 Python
PyTorch CNN实战之MNIST手写数字识别示例
May 29 Python
Python3模拟curl发送post请求操作示例
May 03 Python
python word转pdf代码实例
Aug 16 Python
python实现遍历文件夹图片并重命名
Mar 23 Python
spyder 在控制台(console)执行python文件,debug python程序方式
Apr 20 Python
Python函数递归调用实现原理实例解析
Aug 11 Python
python 用递归实现通用爬虫解析器
Apr 16 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
浅析echo(),print(),print_r(),return之间的区别
2013/11/27 PHP
php中有关字符串的4个函数substr、strrchr、strstr、ereg介绍和使用例子
2014/04/24 PHP
Windows下的PHP 5.3.x安装 Zend Guard Loader教程
2014/09/06 PHP
php实现的简单检验登陆类
2015/06/18 PHP
PHP中ID设置自增后不连续的原因分析及解决办法
2016/08/21 PHP
jQuery之自动完成组件的深入解析
2013/06/19 Javascript
nodejs实现获取某宝商品分类
2015/05/28 NodeJs
require.js的用法详解
2015/10/20 Javascript
如何消除inline-block属性带来的标签间间隙
2016/03/31 Javascript
JQuery validate插件Remote用法大全
2016/05/15 Javascript
使用jquery获取url以及jquery获取url参数的实现方法
2016/05/25 Javascript
用js读写cookie的简单方法(推荐)
2016/08/08 Javascript
jQuery中table数据的值拷贝和拆分
2017/03/19 Javascript
ReactNative之键盘Keyboard的弹出与消失示例
2017/07/11 Javascript
Vue 源码分析之 Observer实现过程
2018/03/29 Javascript
监听element-ui table滚动事件的方法
2019/03/26 Javascript
Node.js API详解之 tty功能与用法实例分析
2020/04/27 Javascript
[55:48]VGJ.S vs TNC Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
python 文件与目录操作
2008/12/24 Python
python 2.6.6升级到python 2.7.x版本的方法
2016/10/09 Python
Python实现监控Nginx配置文件的不同并发送邮件报警功能示例
2019/02/26 Python
Python获取时间戳代码实例
2019/09/24 Python
CSS3过渡transition效果实例介绍
2016/05/03 HTML / CSS
Html5定位终极解决方案
2020/02/05 HTML / CSS
JackJones官方旗舰店:杰克琼斯男装
2018/03/27 全球购物
商务英语专业求职信范文
2014/01/28 职场文书
《小猫刮胡子》教学反思
2014/02/21 职场文书
植树节活动总结
2014/04/30 职场文书
物流专业求职信
2014/06/30 职场文书
店铺转让协议书(2014版)
2014/09/23 职场文书
银行授权委托书样本
2014/10/13 职场文书
学校政风行风整改方案
2014/10/25 职场文书
小学英语复习计划
2015/01/19 职场文书
幼儿园安全教育月活动总结
2015/05/08 职场文书
Java 中的 Unsafe 魔法类的作用大全
2021/06/26 Java/Android
python​格式化字符串
2022/04/20 Python