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程序运行效率的6个方法
Mar 31 Python
详解常用查找数据结构及算法(Python实现)
Dec 09 Python
详解Python 2.6 升级至 Python 2.7 的实践心得
Apr 27 Python
PyCharm代码提示忽略大小写设置方法
Oct 28 Python
从运行效率与开发效率比较Python和C++
Dec 14 Python
总结Python图形用户界面和游戏开发知识点
May 22 Python
python opencv 二值化 计算白色像素点的实例
Jul 03 Python
Python 项目转化为so文件实例
Dec 23 Python
Django中的session用法详解
Mar 09 Python
如何解决flask修改静态资源后缓存文件不能及时更改问题
Aug 02 Python
Django展示可视化图表的多种方式
Apr 08 Python
Python djanjo之csrf防跨站攻击实验过程
May 14 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
手冲咖啡应该是现代精品咖啡店的必备选项吗?
2021/03/03 冲泡冲煮
如何用PHP做到页面注册审核
2017/03/02 PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
2019/04/16 PHP
laravel 使用事件系统统计浏览量的实现
2019/10/16 PHP
HR vs CL BO3 第二场 2.13
2021/03/10 DOTA
js实现的网页颜色代码表全集
2007/07/17 Javascript
解决iframe的frameborder在chrome/ff/ie下的差异
2010/08/12 Javascript
JavaScript入门之事件、cookie、定时等
2011/10/21 Javascript
这段js代码得节约你多少时间
2011/12/20 Javascript
js遍历td tr等html元素
2012/12/13 Javascript
如何用JavaScript定义一个类
2014/09/12 Javascript
基于NodeJS的前后端分离的思考与实践(六)Nginx + Node.js + Java 的软件栈部署实践
2014/09/26 NodeJs
Bootstrap中的fileinput 多图片上传及编辑功能
2016/09/05 Javascript
JavaScript创建对象方法实例小结
2018/09/03 Javascript
使用vscode快速建立vue模板过程详解
2019/10/10 Javascript
三步搞定:Vue.js调用Android原生操作
2020/09/07 Javascript
js+h5 canvas实现图片验证码
2020/10/11 Javascript
[48:24]完美世界DOTA2联赛循环赛LBZS vs Forest 第一场 10月30日
2020/10/31 DOTA
Python比较两个图片相似度的方法
2015/03/13 Python
python监控键盘输入实例代码
2018/02/09 Python
OpenCV+Python--RGB转HSI的实现
2019/11/27 Python
python统计字符串中字母出现次数代码实例
2020/03/02 Python
python查看矩阵的行列号以及维数方式
2020/05/22 Python
利用python下载scihub成文献为PDF操作
2020/07/09 Python
python GUI计算器的实现
2020/10/09 Python
python如何对链表操作
2020/10/10 Python
Python获取android设备cpu和内存占用情况
2020/11/15 Python
python实现图片,视频人脸识别(dlib版)
2020/11/18 Python
python爬虫scrapy框架的梨视频案例解析
2021/02/20 Python
纯CSS3实现手风琴风格菜单具体步骤
2013/05/06 HTML / CSS
台湾东南旅游社网站:东南旅游
2019/02/11 全球购物
班长岗位职责
2013/11/10 职场文书
大三学习计划书范文
2014/05/02 职场文书
后备干部培训方案
2014/05/22 职场文书
圣诞节活动策划方案
2014/06/09 职场文书
idea以任意顺序debug多线程程序的具体用法
2021/08/30 Java/Android