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')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值