美文网首页
python生成验证码图片

python生成验证码图片

作者: 明明就_c565 | 来源:发表于2024-06-14 10:17 被阅读0次

代码

# 没有混色

import string 

from random import randint, choice

from PIL import Image, ImageDraw, ImageFont

def generate_verification_code_image(self, length=6):

    from PIL import Image, ImageDraw, ImageFont

    import random

    import string

    # 1. 设定验证码长度和图片大小

    code_length = 6

    width, height = 200, 80

    # 2. 创建一个新的图像对象

    color = (randint(0, 255), randint(0, 255), randint(0, 255))

    image = Image.new('RGB', (width, height), color=color)

    # 3. 选择一种字体和字体大小

    # 这里假设你有一个.ttf字体文件,你需要指定其路径

    font_path = 'arial.ttf'  # 例如 'arial.ttf'

    font_size = 40

    # font = ImageFont.truetype(font_path, font_size)

    font = ImageFont.load_default(size=40)

    # 4. 随机生成6位包含数字和字母的验证码字符串

    characters = string.ascii_letters + string.digits  # 所有字母和数字

    code = ''.join(random.choice(characters) for _ in range(code_length))

    # 5. 在图像上绘制验证码字符串

    draw = ImageDraw.Draw(image)

    x = width // 4  # 起始位置

    y = height // 2 + font_size // 3  # 垂直居中,并稍微上移一些

    color = (randint(0, 255), randint(0, 255), randint(0, 255))

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

    # 6. 保存或显示图像

    # image.save('captcha.png')

    # image.show()

    return code, image

# 有混色

def generate_verification_code_image(self, length=6):

    width, height = 160, 50

    color = (randint(150, 255), randint(150, 255), randint(150, 255))

    image = Image.new('RGB', size=(width, height), color=color)

    font = ImageFont.load_default(size=40)

    draw = ImageDraw.Draw(image)

    code = ''.join(choice(string.ascii_letters + string.digits) for _ in range(length))

    for i, value in enumerate(code):

        color = (randint(0, 150), randint(0, 150), randint(0, 150))

        draw.text((5 + randint(4, 7) + 25 * i, 1 + randint(2, 8) + 2 * i),

                  text=value,

                  fill=color,

                  font=font)

    for j in range(randint(5, 8)):

        x1 = randint(0, width)

        y1 = randint(0, height // 2)

        x2 = randint(0, width)

        y2 = randint(height // 2, height)

        color = (randint(0, 255), randint(0, 255), randint(0, 255))

        draw.line(((x1, y1), (x2, y2)), fill=color)

    for k in range(randint(5, 8)):

        start = (-height, -height)

        end = (width + 10, randint(0, height + 10))

        color = (randint(0, 255), randint(0, 255), randint(0, 255))

        draw.arc(start + end, 0, 360, fill=color)

    for m in range(width):

        for n in range(height):

            number = randint(1, 100)

            if number > 90:

                draw.point((m, n), fill=(randint(0, 255), randint(0, 255), randint(0, 255)))

    return code.lower(), image

参考:

https://blog.csdn.net/fj_changing/article/details/116430159

相关文章

网友评论

      本文标题:python生成验证码图片

      本文链接:https://www.haomeiwen.com/subject/evxgqjtx.html