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写xml文件的操作实例
Oct 05 Python
简单实现python聊天程序
Apr 01 Python
Window 64位下python3.6.2环境搭建图文教程
Sep 19 Python
Python中的集合介绍
Jan 28 Python
使用Python控制摄像头拍照并发邮件
Apr 23 Python
Pyqt5 基本界面组件之inputDialog的使用
Jun 25 Python
Python转换itertools.chain对象为数组的方法
Feb 07 Python
Python模拟登入的N种方式(建议收藏)
May 31 Python
Python flask框架实现查询数据库并显示数据
Jun 04 Python
pycharm配置QtDesigner的超详细方法
Jan 25 Python
ASP.NET Core中的配置详解
Feb 05 Python
python自动化测试之Selenium详解
Mar 13 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 在线翻译函数代码
2009/05/07 PHP
codeigniter框架The URI you submitted has disallowed characters错误解决方法
2014/05/06 PHP
smarty模板数学运算示例
2016/12/11 PHP
php获取excel文件数据
2017/04/21 PHP
php根据地址获取百度地图经纬度的实例方法
2019/09/03 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
EasyUi tabs的高度与宽度根据IE窗口的变化自适应代码
2010/10/26 Javascript
使用Jquery打造最佳用户体验的登录页面的实现代码
2011/07/08 Javascript
js函数的引用, 关于内存的开销
2012/09/17 Javascript
JS定时器实例详细分析
2013/10/11 Javascript
使用js完成节点的增删改复制等的操作
2014/01/02 Javascript
jquery实现pager控件示例
2014/04/09 Javascript
JS实现点击按钮自动增加一个单元格的方法
2015/03/09 Javascript
js简单时间比较的方法
2016/08/02 Javascript
浅析vue-router原理
2018/10/19 Javascript
纯js+css实现仿移动端淘宝网站的弹出详情框功能
2019/12/29 Javascript
js实现无限层级树形数据结构(创新算法)
2020/02/27 Javascript
openlayers实现地图弹窗
2020/09/25 Javascript
Vue如何跨组件传递Slot的实现
2020/12/14 Vue.js
[02:55]DOTA2英雄基础教程 发条技师
2013/12/04 DOTA
使用Flask集成bootstrap的方法
2018/07/24 Python
Python实现的简单计算器功能详解
2018/08/25 Python
Python定时任务工具之APScheduler使用方式
2019/07/24 Python
python3让print输出不换行的方法
2020/08/24 Python
使用phonegap进行本地存储的实现方法
2017/03/31 HTML / CSS
挪威户外活动服装和装备购物网站:Bergfreunde挪威
2016/10/20 全球购物
FILA斐乐中国官方商城:意大利运动品牌
2017/01/25 全球购物
美国运动鞋和服装网上商店:YCMC
2018/09/15 全球购物
英国领先的名牌服装折扣零售商:Brown Bag Clothing
2019/01/08 全球购物
党员岗位承诺口号大全
2014/03/28 职场文书
安全生产专项整治方案
2014/05/06 职场文书
2014教师年度思想工作总结
2014/11/10 职场文书
幼儿园辞职信
2015/05/13 职场文书
2015年小学体育教师工作总结
2015/10/23 职场文书
2019年七夕情人节浪漫祝福语大全!
2019/08/08 职场文书
Python中time与datetime模块使用方法详解
2022/03/31 Python