Python实现随机生成图片验证码详解

Python实现随机生成图片验证码详解

简介

图片验证码是一种常见的用户身份验证方式。Python提供了丰富的库,可以轻松地实现随机生成图片验证码。

随机生成图片验证码的主要思路:

  1. 定义图片大小和颜色;
  2. 定义验证码字符集;
  3. 随机生成验证码;
  4. 添加干扰线、噪点等;
  5. 保存图片。

示例一:随机生成4位数字验证码

from PIL import Image, ImageDraw, ImageFont
import random

# 定义图片大小、背景颜色、字体大小、字符集、字符数量
width, height, bg_color, font_size, charset, code_len = 120, 30, "#FFFFFF", 20, "0123456789", 4

# 随机生成验证码
code = "".join(random.sample(charset, code_len))

# 创建Image对象
img = Image.new("RGB", (width, height), bg_color)

# 创建Draw对象
draw = ImageDraw.Draw(img)

# 创建Font对象
font = ImageFont.truetype("arial.ttf", font_size)

# 绘制验证码字符
left = (width - font_size * code_len) // 2
top = (height - font_size) // 2
for i, ch in enumerate(code):
    draw.text((left + font_size * i, top), ch, fill=random.choice(["#FF0000", "#00FF00", "#0000FF"]), font=font)

# 添加干扰线、噪点
for i in range(3):
    x1 = random.randint(0, width // 2)
    y1 = random.randint(0, height)
    x2 = random.randint(0, width // 2) + width // 2
    y2 = random.randint(0, height)
    draw.line((x1, y1, x2, y2), fill=random.choice(["#FF0000", "#00FF00", "#0000FF"]), width=2)

    x = random.randint(0, width)
    y = random.randint(0, height)
    draw.point((x, y), fill=random.choice(["#FF0000", "#00FF00", "#0000FF"]))

# 保存验证码图片
img.save(f"{code}.png")

以上代码中,通过Pillow库的Image、ImageDraw、ImageFont模块实现图片的创建、绘制和字体加载。随机生成了4位数字验证码,并绘制在图片上,同时加入干扰线和噪点。最后将生成的验证码图片保存。

示例二:随机生成4位大小写字母和数字混合验证码

from PIL import Image, ImageDraw, ImageFont
import random

# 定义图片大小、背景颜色、字体大小、字符集、字符数量
width, height, bg_color, font_size, charset, code_len = 120, 30, "#FFFFFF", 20, "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", 4

# 随机生成验证码
code = "".join(random.sample(charset, code_len))

# 创建Image对象
img = Image.new("RGB", (width, height), bg_color)

# 创建Draw对象
draw = ImageDraw.Draw(img)

# 创建Font对象
font = ImageFont.truetype("arial.ttf", font_size)

# 绘制验证码字符
left = (width - font_size * code_len) // 2
top = (height - font_size) // 2
for i, ch in enumerate(code):
    draw.text((left + font_size * i, top), ch, fill=random.choice(["#FF0000", "#00FF00", "#0000FF"]), font=font)

# 添加干扰线、噪点
for i in range(3):
    x1 = random.randint(0, width // 2)
    y1 = random.randint(0, height)
    x2 = random.randint(0, width // 2) + width // 2
    y2 = random.randint(0, height)
    draw.line((x1, y1, x2, y2), fill=random.choice(["#FF0000", "#00FF00", "#0000FF"]), width=2)

    x = random.randint(0, width)
    y = random.randint(0, height)
    draw.point((x, y), fill=random.choice(["#FF0000", "#00FF00", "#0000FF"]))

# 保存验证码图片
img.save(f"{code}.png")

以上代码与示例一类似,不同之处在于添加了大小写字母和数字到字符集中,并随机生成包含它们的验证码。

总结

以上是随机生成图片验证码的完整攻略,通过Python和Pillow库的相关模块,可以实现各式各样的验证码的生成。图片验证码可以在网站、用户注册、信息安全验证等场景中得到广泛的应用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现随机生成图片验证码详解 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • Django之模板层的实现代码

    下面是“Django之模板层的实现代码”的完整攻略。 什么是Django模板层? Django的模板层是将用户数据和视图层之间的交互进行分离的一种方式。通过Django模板层,我们可以将页面渲染的代码分离到一个单独的文件中,从而减少代码混杂和代码冗余的问题,提高了代码的可维护性和可读性。 Django模板层如何实现 Django的模板层是由一些Python类…

    人工智能概论 2023年5月25日
    00
  • 易语言修改指定网页为浏览器主页的代码

    以下是详细讲解“易语言修改指定网页为浏览器主页的代码”的完整攻略。 1. 确认浏览器主页的配置文件路径 首先,我们需要确认浏览器主页的配置文件路径。以Chrome为例,Windows系统下Chrome的主页配置文件存放在C:\Users\{user}\AppData\Local\Google\Chrome\User Data\Default\Preferen…

    人工智能概论 2023年5月25日
    00
  • 关于Yii2框架跑脚本时内存泄漏问题的分析与解决

    下面我将详细讲解“关于Yii2框架跑脚本时内存泄漏问题的分析与解决”的完整攻略。 前言 在使用Yii2框架开发的过程中,我们时常需要编写一些脚本程序来完成一些自动化操作。但是,在运行这些脚本程序的过程中,我们可能会遇到内存泄漏问题,这将会导致脚本程序越运行越慢,最终导致程序奔溃。因此,本文将对Yii2框架中跑脚本时出现的内存泄漏问题进行分析,并提供解决方案。…

    人工智能概论 2023年5月25日
    00
  • HTML的form表单和django的form表单

    下面我将详细讲解“HTML的form表单和django的form表单”的完整攻略。 HTML的form表单 表单(form)是HTML中常用的交互元素之一,用于向服务器提交数据。HTML中的表单包含多个表单元素,例如输入框、下拉框、单选框等等。在表单中,用户可以输入数据,并通过提交按钮将数据发送给服务器。 HTML表单使用步骤 使用form标签创建表单。 使…

    人工智能概论 2023年5月25日
    00
  • opencv实现图像颜色空间转换

    下面就是Opencv实现图像颜色空间转换的完整攻略。 1. 什么是图像颜色空间? 图像颜色空间就是将图像中的像素从一个颜色空间转换到另一个颜色空间的过程。在计算机视觉和图像处理中,常用的颜色空间有RGB、HSV、LAB、YUV等。 2. Opencv实现图像颜色空间转换的函数 Opencv提供了很多函数来完成图像颜色空间转换。常用的函数有: cvtColor…

    人工智能概览 2023年5月25日
    00
  • 利用mongodb查询某坐标是否在规定多边形区域内的方法

    要利用mongodb查询某坐标是否在规定多边形区域内,需要使用mongodb的地理空间功能。在mongodb中,我们可以将地理空间数据存储为GeoJSON格式,针对该格式的数据有丰富的地理空间查询功能。下面是实现步骤: 定义地理位置字段 在mongodb中,使用GeoJSON格式来表示地理位置数据。所以,在数据表中要定义一个字段专门存储GeoJSON格式的数…

    人工智能概论 2023年5月25日
    00
  • 坚果Pro值不值得买?坚果Pro深度体验评测图解

    “坚果Pro值不值得买?坚果Pro深度体验评测图解”攻略 背景介绍 坚果Pro是锤子科技的一款手机产品,它拥有着高性能、长续航、全面屏等优势,但是相对较高的价格也让很多人望而却步。那么,坚果Pro值不值得买呢?下面我们将从多个方面来进行分析。 性能评测 首先,我们来看一下坚果Pro的性能表现。我们对坚果Pro进行了多项测试,并且与其他手机进行了对比。通过结果…

    人工智能概览 2023年5月25日
    00
  • pytorch中with torch.no_grad():的用法实例

    下面是pytorch中with torch.no_grad()的用法实例的攻略: 1. 什么是torch.no_grad() 在深度学习模型训练过程中,模型的前向传播和反向传播计算中都需要计算梯度,以便于更新参数。但在模型预测时,我们并不需要计算梯度,因此使用torch.no_grad()可以临时关闭该计算图的梯度计算操作。这可以减小模型权重对显存的占用,同…

    人工智能概论 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部