python随机生成图片验证码

## 随机生成验证码

from PIL import Image, ImageDraw, ImageFont
import random

## 随机颜色1(背景颜色):
def rndColor():
    return (random.randint(170, 250),
            random.randint(170, 250),
            random.randint(170, 250))

## 随机颜色2(数字或字母颜色)
def rndColor2():
    return (random.randint(0, 127),
            random.randint(0, 127),
            random.randint(0, 127))

## 生成随机验证码文本
def generate_random_code(code_length):
    code_chars = '0123456789abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ-_*#$%'      # 0123456789abcdefghjkmnpqrstuvwxyz
    code = ''
    for _ in range(code_length):
        code += random.choice(code_chars)
    return code


## 生成验证码图片
def generate_captcha_image(width, height, code_length):  
    ## 创建一个空白图片
    image = Image.new('RGBA', (width, height), (255, 255, 255))
    draw = ImageDraw.Draw(image)
    for x in range(width):
        for y in range(height):
            draw.point((x, y), fill=rndColor())

    ## 选择字体和字体大小
    font = ImageFont.truetype('arial.ttf', 20)
    ## 生成随机验证码文本
    code = generate_random_code(code_length)
    ascent, descent = font.getsize(code)    # 这里拿到文字内容的大小

    ## 将验证码文本绘制到图片上
    x = 1    #  width/2-ascent/2  # 这里是文字内容的居中绘制算法
    print(code)

    for i in range(6):
        draw.text((x+i*(width-2*x)/6, 0), code[i], font=font, fill=rndColor2())
    return image

def save_captcha_image(image, filename):
    image.save(filename)

    ## 调用生成验证码图片和保存验证码图片的函数


if __name__ == '__main__':    
    # 调用生成验证码图片和保存验证码图片的函数
    captcha_image = generate_captcha_image(80, 22, 6)
    save_captcha_image(captcha_image, 'captcha.png')
    img = Image.open(('captcha.png'))
    Image._show(img)
posted @ 2023-11-10 09:35  冀未然  阅读(48)  评论(0)    收藏  举报