首页 > 编程知识 正文

Python程序生成验证码图片

时间:2023-11-21 13:44:17 阅读:295226 作者:CLJI

验证码图片是一种常用的安全机制,用于验证用户输入是否正确以及防止恶意访问和自动化攻击。Python提供了丰富的库和工具来生成验证码图片,使开发人员能够轻松实现这一功能。

一、生成随机验证码

生成随机验证码是生成验证码图片的首要任务。Python的random模块提供了生成随机数的函数,我们可以利用这些函数生成包含数字和字母的随机验证码。下面是生成随机验证码的代码:

import random
import string

def generate_code(length):
    code = ''
    for _ in range(length):
        code += random.choice(string.ascii_letters + string.digits)
    return code

code = generate_code(4)
print(code)

代码中首先导入了random和string模块,random模块提供了random.choice()函数用于从给定的字符串中随机选择一个字符,string模块提供了ascii_letters和digits两个字符串常量,分别包含了所有的字母和数字。

generate_code()函数利用random.choice()函数生成了指定长度的随机验证码,并返回该验证码。

通过调用generate_code()函数,我们可以生成指定长度的随机验证码。

二、绘制验证码图片

生成了随机验证码之后,接下来我们需要将验证码绘制成图片。Python的Pillow库是一个强大的图像处理库,可以用来创建、编辑和保存图像。下面是绘制验证码图片的代码:

from PIL import Image, ImageDraw, ImageFont

def generate_image(code):
    width, height = 200, 100
    font_size = 60

    image = Image.new('RGB', (width, height), (255, 255, 255))
    draw = ImageDraw.Draw(image)
    font = ImageFont.truetype('arial.ttf', font_size)

    text_width, text_height = draw.textsize(code, font)
    x = (width - text_width) / 2
    y = (height - text_height) / 2

    draw.text((x, y), code, font=font, fill=(0, 0, 0))

    image.show()

generate_image(code)

代码中首先导入了Pillow库中的Image、ImageDraw和ImageFont模块,Image模块用于创建和保存图像,ImageDraw模块用于绘制图像的各种元素,ImageFont模块用于加载字体文件。

generate_image()函数接受一个验证码作为参数,然后创建一个指定大小的白色图片,并在图片中绘制验证码。绘制之前,我们需要确定验证码文本的宽度、高度以及在图片中的位置,这可以通过使用ImageDraw的textsize()函数来实现。

绘制完成后,通过调用image.show()方法显示验证码图片。

三、加入干扰线和噪点

为了增加验证码的难度,我们可以在验证码图片上加入一些干扰线和噪点。下面是加入干扰线和噪点的代码:

import random

def generate_image_with_distortion(code):
    width, height = 200, 100
    font_size = 60

    image = Image.new('RGB', (width, height), (255, 255, 255))
    draw = ImageDraw.Draw(image)
    font = ImageFont.truetype('arial.ttf', font_size)

    for x in range(width):
        for y in range(height):
            if random.random() < 0.05:
                image.putpixel((x, y), (0, 0, 0))

    text_width, text_height = draw.textsize(code, font)
    x = (width - text_width) / 2
    y = (height - text_height) / 2

    draw.text((x, y), code, font=font, fill=(0, 0, 0))

    for _ in range(3):
        x1 = random.randint(0, width)
        y1 = random.randint(0, height)
        x2 = random.randint(0, width)
        y2 = random.randint(0, height)
        draw.line((x1, y1, x2, y2), fill=(0, 0, 0))

    image.show()

generate_image_with_distortion(code)

代码中使用了两个嵌套循环遍历图片的每个像素点,通过random.random()函数生成一个随机数,当随机数小于0.05时,将当前像素点的颜色设为黑色,从而形成噪点。

另外,为了加入干扰线,我们使用了random.randint()函数生成两个随机点的坐标,然后通过draw.line()函数绘制一条连接这两个点的线。

以上就是使用Python程序生成验证码图片的详细阐述。通过生成随机验证码、绘制验证码图片以及加入干扰线和噪点,我们可以实现一个简单但安全可靠的验证码机制。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。