Django实现随机图片验证码(^…^)

views.py

def verifycode(req):
    # 1. 创建画布Image对象
    img = Image.new(mode='RGB', size=(120, 30), color=(220, 220, 180))

    # 2. 创建画笔 ImageDraw对象
    draw = ImageDraw.Draw(img, 'RGB')

    # 3. 画文本,画点,画线
    # 随机产生0-9, A-Z, a-z范围的字符
    chars = ''
    while len(chars) < 4:
        flag = random.randrange(3)
        char = chr(random.randint(48, 57)) if not flag else \
                  chr(random.randint(65, 90)) if flag == 1 else \
                  chr(random.randint(97, 122))
        # 排除重复的
        if len(chars) == 0 or chars.find(char) == -1:
            chars += char

    # 将生成的验证码的字符串存入到session    req.session['verifycode'] = chars

    font = ImageFont.truetype(font='static/fonts/hktt.ttf', size=25)
    for char in chars:
        xy = (15+chars.find(char)*20, random.randrange(2, 8))
        draw.text(xy=xy,
                  text=char,
                  fill=(255, 0, 0),
                  font=font)
    for i in range(200):
        xy = (random.randrange(120), random.randrange(30))
        color = (random.randrange(255),
                 random.randrange(255),
                 random.randrange(255))
        draw.point(xy=xy, fill=color)

    # 4. 将画布对象转成字节数据
    buffer = BytesIO()  # 缓存
    img.save(buffer, 'png')  # 指定的图片格式为png

    # 5. 清场(删除对象的引用)
    del draw
    del img
    return HttpResponse(buffer.getvalue(),  # BytesIO对象中获取字节数据
                        content_type='image/png')

猜你喜欢

转载自blog.csdn.net/weixin_42046558/article/details/80942892