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日

相关文章

  • PHP中的mongodb group操作实例

    下面是详细讲解PHP中的Mongodb group操作实例的攻略: 简介 Mongodb是一个高性能、高可用、分布式的面向文档型数据库,具有多种查询接口,其中group操作可用于数据分组、聚合等操作。 在PHP中,我们可以通过MongoDB官方提供的MongoDB PHP driver扩展进行Mongodb操作。 安装MongoDB PHP驱动 首先,我们需…

    人工智能概论 2023年5月25日
    00
  • 教你使用Python实现一个简易版Web服务器

    教你使用Python实现一个简易版Web服务器 在本篇攻略中,我们将使用Python编写一个基于TCP协议的简易版Web服务器,以便更好地理解网络编程和Web服务器工作原理。 什么是Web服务器? Web服务器是一种软件,它接收来自互联网的HTTP请求,并将HTTP响应发送回给请求者。Web服务器通常托管网站、应用程序或API,并与浏览器等客户端设备进行通信…

    人工智能概论 2023年5月25日
    00
  • springboot调用支付宝第三方接口(沙箱环境)

    下面我就来详细讲解一下如何使用SpringBoot调用支付宝第三方接口(沙箱环境)的完整攻略。 1. 前置条件 已经创建了支付宝开发者账号,并且完成了实名认证。 已经创建了应用并获得了应用对应的 AppID 和 AppPrivateKey。 已经下载了并安装了沙箱环境SDK。 已经安装了Spring Boot框架。 2. 配置支付宝接口参数 在项目的 app…

    人工智能概论 2023年5月25日
    00
  • Ubuntu 搭建LNMP环境图文教程 安装Nginx服务器

    Ubuntu 搭建 LNMP 环境图文教程 前言 LNMP是使用Linux+Nginx+MySQL+PHP构建的Web开发环境。Ubuntu是一个广泛使用的Linux操作系统。搭建LNMP环境在开发Web应用中非常常见。本文将介绍如何在Ubuntu中搭建LNMP环境,并安装Nginx服务器。 准备工作 在开始搭建环境之前,需要确保系统需要更新到最新的软件版本…

    人工智能概览 2023年5月25日
    00
  • PHP的Laravel框架中使用消息队列queue及异步队列的方法

    使用消息队列(queue)是一种异步的处理方式,可以将一些延时处理的任务放到消息队列中进行,这种方式可以减轻同步处理的压力,提高处理效率。Laravel框架中提供了轻量级的队列系统以跟消息队列(queue)进行交互,自带的队列驱动包括数据库,Redis,Amazon SQS等。 下面是使用Laravel框架消息队列(queue)及异步队列的方法: 1. 安装…

    人工智能概览 2023年5月25日
    00
  • Spring Boot中快速操作Mongodb数据库指南

    下面是“Spring Boot中快速操作Mongodb数据库指南”的完整攻略。 一、前置条件 要开展本指南中的操作,你需要安装和配置好以下环境: JDK 1.8+ Maven 3.0+(或者其它工具) MongoDB 3.0+(或者其它版本) 二、依赖配置 在Spring Boot项目中使用Mongodb,需要在项目的pom.xml配置文件中添加以下依赖: …

    人工智能概论 2023年5月25日
    00
  • Python随机生成身份证号码及校验功能

    下面就来详细讲解如何使用Python随机生成身份证号码及校验功能。 什么是身份证号码? 中国居民身份证号码,是中华人民共和国公民的唯一身份证号码,由18个字符组成。 身份证号码的结构 身份证号码由前6位地址码、8位出生日期码、3位顺序码和1位校验码组成,其中顺序码为随机生成。 身份证号码的结构如下: 6位地址码 8位出生日期码 3位顺序码 1位校验码 110…

    人工智能概览 2023年5月25日
    00
  • Python使用mongodb保存爬取豆瓣电影的数据过程解析

    下面是Python使用MongoDB保存爬取豆瓣电影数据的完整攻略。 1. 安装MongoDB 在开始之前,需要先安装MongoDB数据库,具体步骤可参考MongoDB官方文档:https://docs.mongodb.com/manual/administration/install-community/ 2. 安装Python库 接下来需要安装Pytho…

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