python生成验证码图片代码分享

yizhihongxing

下面是“python生成验证码图片代码分享”的完整攻略。

1. 需求分析

我们需要实现一个Python程序,用于生成验证码图片。这个程序需要具备以下功能:

  1. 生成一段随机的英文字母和数字字符组合的字符串。
  2. 将生成的字符串渲染到一张图片上,并通过HTTP响应返回给用户。

2. 编写代码

2.1 安装依赖库

我们需要使用Pillow库来渲染图片,可以通过pip命令安装:

pip install Pillow

2.2 实现生成验证码字符串的函数

在Python中,我们可以使用random库和string库来生成随机字符。

下面是一个生成长度为4的随机字符串的示例代码:

import random
import string

def generate_code(length=4):
    """生成随机的验证码字符串"""
    chars = string.ascii_letters + string.digits  # 所有的英文大小写字母和数字
    code = ''.join(random.choice(chars) for _ in range(length))
    return code

2.3 实现生成图片的函数

我们使用Pillow库来生成图片,具体实现方法如下:

from PIL import Image, ImageDraw, ImageFont

def generate_image(code):
    """生成带有验证码的图片"""
    img_width = 200  # 图片宽度
    img_height = 100  # 图片高度
    font_size = int(img_height * 0.5)  # 字体大小
    image = Image.new('RGB', (img_width, img_height), color=(255, 255, 255))  # 创建一张白底图片
    draw = ImageDraw.Draw(image)  # 创建一个ImageDraw对象
    font = ImageFont.truetype('arial.ttf', font_size)  # 加载字体文件
    draw.text((10, 30), code, fill=(0, 0, 255), font=font)  # 使用ImageDraw的text方法渲染文字
    return image

2.4 实现HTTP服务

最后一步,我们需要将生成的图片通过HTTP响应返回给用户。

我们可以使用Python内置的http.server库来实现一个简单的HTTP服务。代码如下:

from http.server import BaseHTTPRequestHandler, HTTPServer
from io import BytesIO
import urllib

class MyHTTPHandler(BaseHTTPRequestHandler):

    def do_GET(self):
        self.send_response(200)
        self.send_header('Content-Type', 'image/jpeg')
        self.end_headers()

        code = generate_code()  # 生成随机的验证码字符串
        image = generate_image(code)  # 根据验证码字符串生成图片
        buffer = BytesIO()  # 创建一个BytesIO缓冲区
        image.save(buffer, 'jpeg')  # 将图片存储到缓冲区
        self.wfile.write(buffer.getvalue())  # 将缓冲区的数据作为HTTP响应返回给客户端

if __name__ == '__main__':
    server_address = ('', 8000)
    httpd = HTTPServer(server_address, MyHTTPHandler)
    print('Starting http server on localhost:%d ...' % server_address[1])
    httpd.serve_forever()

3. 测试结果

我们可以通过浏览器访问http://localhost:8000/,就能看到生成的验证码图片。

4. 示例说明

示例一

我们可以将上面的代码保存到文件中,比如命名为“captcha.py”,在命令行中运行:

python captcha.py

然后在浏览器中访问http://localhost:8000/,就能看到生成的验证码图片。

示例二

我们将上面的代码做一些修改,可以让生成的验证码图片加上日期时间的前缀,以避免出现重名的情况。

import time

class MyHTTPHandler(BaseHTTPRequestHandler):

    def do_GET(self):
        self.send_response(200)
        self.send_header('Content-Type', 'image/jpeg')
        self.end_headers()

        code = generate_code()  # 生成随机的验证码字符串
        timestamp = time.strftime('%Y%m%d%H%M%S', time.localtime())
        filename = 'captcha_{}_{}.jpeg'.format(timestamp, code)
        image = generate_image(code)  # 根据验证码字符串生成图片
        buffer = BytesIO()  # 创建一个BytesIO缓冲区
        image.save(buffer, 'jpeg')  # 将图片存储到缓冲区
        self.wfile.write(buffer.getvalue())  # 将缓冲区的数据作为HTTP响应返回给客户端

在命令行中运行:

python captcha.py

然后在浏览器中多次访问http://localhost:8000/,我们可以看到生成的验证码图片都带有日期时间前缀的文件名,避免了覆盖原文件的风险。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python生成验证码图片代码分享 - Python技术站

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

相关文章

  • 如何在Django中设置定时任务的方法示例

    设置定时任务是一个常见的需求,而在Django中,我们可以使用第三方库来实现定时任务的功能。下面是在Django中设置定时任务的方法示例: 安装第三方库 首先,我们需要安装第三方库django-crontab,在终端中使用以下命令进行安装: pip install django-crontab 安装完成后,在 Django 项目的 settings.py 文…

    人工智能概论 2023年5月25日
    00
  • Python Process多进程实现过程

    Python Process多进程实现过程 Python中的多进程是一种常见的并发处理方式,通过并发处理可以提高程序的运行速度,也是很多高效处理程序的必备方法之一。在Python中,使用multiprocessing模块来实现多进程,下面将详细讲解Python Process多进程实现过程。 多进程简介 多进程是指在同一时间内,计算机中可以运行多个进程,每个…

    人工智能概论 2023年5月25日
    00
  • Java单例模式下的MongoDB数据库操作工具类

    那我先简单介绍一下Java单例模式和MongoDB数据库操作。Java单例模式是一种设计模式,它可以确保一个类在整个应用程序中只有一个实例,并且提供了全局访问该实例的方式。而MongoDB是一种非关系型数据库,具有高性能、可伸缩的特点,支持大数据存储和处理。下面我将详细讲解如何在Java单例模式下编写MongoDB数据库操作工具类。 步骤一:创建单例模式类 …

    人工智能概论 2023年5月25日
    00
  • OpenCV之理解KNN邻近算法k-Nearest Neighbour

    OpenCV之理解KNN邻近算法k-Nearest Neighbour 什么是KNN算法 KNN(k-Nearest Neighbour)是一种无监督学习中的非参数模型,即不对数据的整体分布做出任何假设。该算法的主要思路是:对于一个未知样本,把它的特征向量与训练集中所有特征向量进行比较,找到与其特征最相似的k个样本,并把该样本归为最相似的k个样本所代表的类别…

    人工智能概论 2023年5月25日
    00
  • Spring Boot + Thymeleaf + Activiti 快速开发平台项目 附源码

    下面就是Spring Boot + Thymeleaf + Activiti快速开发平台项目的完整攻略。 项目简介 该项目是一个使用Spring Boot和Thymeleaf作为前端模板引擎,Activiti作为工作流引擎的快速开发平台项目,通过该项目可以快速搭建企业级应用程序。项目的主要功能包括:用户登陆、用户管理、角色管理、菜单权限管理、部门管理、工作流…

    人工智能概览 2023年5月25日
    00
  • pytorch 实现在预训练模型的 input上增减通道

    要在 PyTorch 中增减预训练模型的输入通道数,可以参照以下步骤: 步骤一:下载并加载预训练模型 首先需要下载预训练模型的权重参数文件,在本示例中我们使用的是 ResNet18 模型 import torch import torchvision.models as models model = models.resnet18(pretrained=Tr…

    人工智能概论 2023年5月25日
    00
  • FastDFS安装和配置整合Nginx-1.13.3的方法

    下面我来为您详细讲解如何安装和配置FastDFS,并整合Nginx-1.13.3的方法。 一、FastDFS安装 首先进入FastDFS官网http://fastdfs.org/下载解压缩包,然后进入FastDFS目录下,执行以下命令安装FastDFS: ./make.sh && ./make.sh install 安装完成后,我们需要修改f…

    人工智能概览 2023年5月25日
    00
  • 编写每天定时切割Nginx日志的脚本

    编写每天定时切割Nginx日志的脚本可以有效的管理日志文件,避免日志文件过大导致服务器性能问题,同时还能提供更好的日志管理体验。下面介绍一下具体的步骤。 1. 安装 logrotate 工具 logrotate 是一个日志管理工具,可以用于指定日志目录,日志文件切割方式和周期等相关操作。在 CentOS 上,通过以下命令安装: yum install -y …

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