Python 模拟动态产生字母验证码图片功能

时间:2022-02-10 21:03:35 

模拟动态产生字母验证码图片

模拟生成验证码,首先要做的是生成随机的字母,然后对字母进行模糊处理。这里介绍一下 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 模拟动态产生字母验证码图片功能网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

来源:https://blog.csdn.net/weixin_45642918/article/details/103655130

标签:Python,字母,验证码,图片
0
投稿

猜你喜欢

  • Django 批量插入数据的实现方法

    2023-01-11 10:40:58
  • 基于Python实现音乐播放器的实现示例代码

    2023-11-26 23:58:50
  • python opencv把一张图片嵌入(叠加)到另一张图片上的实现代码

    2021-08-11 12:52:30
  • python私有属性和方法实例分析

    2023-11-21 06:16:13
  • Python PaddleGAN实现调整照片人物年龄

    2023-09-28 05:48:14
  • PHP5中使用DOM控制XML实现代码

    2023-09-30 09:00:07
  • python 监听salt job状态,并任务数据推送到redis中的方法

    2022-09-14 05:19:47
  • Python GUI布局尺寸适配方法

    2022-03-07 05:52:26
  • Python实现改变与矩形橡胶的线条的颜色代码示例

    2022-08-02 08:16:26
  • Django使用paginator插件实现翻页功能的实例

    2023-09-06 05:23:19
  • Python selenium把歌词评论做成词云图

    2022-12-29 10:17:35
  • 儿童学习python的一些小技巧

    2021-10-14 05:09:40
  • 图片链接轮换代码, 支持预载

    2007-10-16 19:57:00
  • python求加权平均值的实例(附纯python写法)

    2022-12-22 22:12:03
  • Python使用win32 COM实现Excel的写入与保存功能示例

    2021-03-30 11:28:50
  • 二级域名原理以及asp实现程序

    2007-08-03 13:08:00
  • Python编程基础之类和对象

    2023-08-04 11:52:33
  • 关于Torch torchvision Python版本对应关系说明

    2021-06-17 09:13:52
  • asp多关键词查询方案

    2008-05-09 12:24:00
  • 最新LOGO设计流行趋势——叶子

    2007-10-02 18:26:00
  • asp之家 网络编程 m.aspxhome.com