Python 语言 用 Pillow 生成验证码图片 含干扰线 + 随机字符

Python阿木 发布于 18 小时前 1 次阅读


使用Pillow生成包含干扰线和随机字符的验证码图片

验证码(CAPTCHA)是一种常见的网络安全技术,用于防止自动化程序(如机器人、爬虫等)对网站的恶意攻击。通过生成包含随机字符和干扰线的图片,验证码可以有效地阻止自动化程序识别和攻击。Python的Pillow库是一个强大的图像处理库,可以用来生成各种类型的图像,包括验证码。本文将介绍如何使用Pillow库生成包含干扰线和随机字符的验证码图片。

准备工作

在开始编写代码之前,请确保已经安装了Pillow库。如果没有安装,可以通过以下命令进行安装:

bash
pip install Pillow

代码实现

以下是一个使用Pillow库生成验证码图片的示例代码:

python
from PIL import Image, ImageDraw, ImageFont
import random
import string

def generate_captcha(text, width=120, height=40, font_size=24, line_count=5):
"""
生成包含干扰线和随机字符的验证码图片。

:param text: 验证码文本
:param width: 图片宽度
:param height: 图片高度
:param font_size: 字体大小
:param line_count: 干扰线数量
:return: PIL.Image对象
"""
创建一个白色背景的图片
image = Image.new('RGB', (width, height), 'white')
draw = ImageDraw.Draw(image)

设置字体
font = ImageFont.truetype('arial.ttf', font_size)

绘制文本
text_width, text_height = draw.textsize(text, font=font)
draw.text(((width - text_width) / 2, (height - text_height) / 2), text, font=font, fill='black')

生成干扰线
for _ in range(line_count):
start = (random.randint(0, width), random.randint(0, height))
end = (random.randint(0, width), random.randint(0, height))
draw.line([start, end], fill='black', width=2)

return image

生成验证码文本
captcha_text = ''.join(random.choices(string.ascii_uppercase + string.digits, k=6))

生成验证码图片
captcha_image = generate_captcha(captcha_text)

显示验证码图片
captcha_image.show()

保存验证码图片
captcha_image.save('captcha.png')

代码解析

1. 导入库:我们导入了必要的库,包括Pillow库中的Image、ImageDraw和ImageFont模块,以及random和string模块。

2. 定义函数:`generate_captcha`函数用于生成验证码图片。它接受以下参数:
- `text`:验证码文本。
- `width`:图片宽度,默认为120。
- `height`:图片高度,默认为40。
- `font_size`:字体大小,默认为24。
- `line_count`:干扰线数量,默认为5。

3. 创建图片:使用`Image.new`方法创建一个白色背景的图片。

4. 设置字体:使用`ImageFont.truetype`方法设置字体,这里使用了Arial字体。

5. 绘制文本:使用`draw.text`方法在图片上绘制验证码文本。

6. 生成干扰线:使用`draw.line`方法在图片上随机生成干扰线。

7. 返回图片:函数返回生成的PIL.Image对象。

8. 生成验证码文本:使用`random.choices`方法生成一个包含大小写字母和数字的验证码文本。

9. 生成验证码图片:调用`generate_captcha`函数生成验证码图片。

10. 显示和保存图片:使用`show`方法显示图片,并使用`save`方法保存图片。

总结

本文介绍了如何使用Python的Pillow库生成包含干扰线和随机字符的验证码图片。通过自定义函数和随机生成文本和线条,我们可以创建出具有较高安全性的验证码。在实际应用中,可以根据需要调整字体、颜色、线条样式等参数,以增强验证码的安全性。