侧边栏壁纸
博主头像
小鱼吃猫博客博主等级

你所热爱的,便是你的生活。

  • 累计撰写 115 篇文章
  • 累计创建 47 个标签
  • 累计收到 14 条评论

目 录CONTENT

文章目录

Python生成图片验证码

小鱼吃猫
2023-09-01 / 0 评论 / 3 点赞 / 59 阅读 / 1579 字

Python生成图片验证码

安装库

#安装pillow模块
pip3 install pillow

生成验证码的代码

在随机字符串中,我并没用数字1,大写字母I,以及小写字母l。这3个实在是不好区分,所以我就没放。

import random
from PIL import Image, ImageDraw, ImageFont

# 随机颜色
def random_color():
    return (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))

def random_char(length):
    # 随机选择字符
    characters = "023456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ"
    # 生成指定长度的验证码
    code = ''.join(random.choice(characters) for i in range(length))
    return code


def generate_captcha():
    width, height = 160, 60
    image = Image.new("RGB", (width, height), (255, 255, 255))
    draw = ImageDraw.Draw(image)
    # linux下可能没有这个字体,你可以使用DejaVuSans.ttf
    font = ImageFont.truetype("arial.ttf", 36)

    # 验证码图片
    code = random_char(4)
    for idx,t in enumerate(code):
        # "rtl", "ltr",
        draw.text((40 * idx + 10, 10), t, font=font, fill=random_color())

    # 生成干扰点
    for x in range(0,width,10):
        for y in range(0,height,10):
            draw.point((x, y), fill=(0,0,0))

    # 添加干扰线
    for i 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), width=2)
    # image = image.filter(ImageFilter.GaussianBlur(radius=2))
    image.save("captcha.jpg", "jpeg")

generate_captcha()
3

评论区