django-验证码-gvcode

gvcode.py

 

 

 
import random

from PIL import Image, ImageFont, ImageDraw


def get_code():
    mode = 'RGB'
    bg_width = 180 #这个是验证码那个框框的宽度
    bg_height = 51 #这个是验证码那个框框的高度
    bg_size = (bg_width, bg_height)
    bg_color = (255, 255, 255)
    ttf_path = 'static/DejaVu Sans Mono.ttf'#这个是字体,从linux里扒出来饿字体
    # ttf_path = '/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf' #这个要换你服务器里有的字体才行
    img = Image.new(mode, bg_size, bg_color)
    draw = ImageDraw.Draw(img, mode)
    font = ImageFont.truetype(ttf_path, 25)#这个俺也没懂

    # generate text
    letters = get_letters()
    for index, text in enumerate(letters):
        x = 35 * index + 10 #这个好像是调那个字符间距的
        y = 13
        draw.text((x, y), text, get_rdmcolor(), font)

    # blur the background
    for i in range(100): #这个是设置干扰线的,数值越大,干扰的越厉害
        x = random.randint(0, bg_width)
        y = random.randint(0, bg_height)
        fill = get_rdmcolor()
        draw.point((x, y), fill)
    return img, letters


def get_letters(): #这个就是从下面这些字母里去随机4个出来
    base = '1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'
    result = []
    for i in range(4): #这个是4位,应该改更多位,那么上面的参数还要调试,不然显示有问题
        result.append(random.choice(base))
    return result


def get_rdmcolor():
    return random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)

 

 

 


from libs.gvcode import get_code


#
验证码 def getcode(request): # 生成验证码图片和正确的验证码 img, letters = get_code() request.session['verification_code'] = ''.join(letters) fp = BytesIO() img.save(fp, 'png') return HttpResponse(fp.getvalue(), content_type='image/png')

 

posted @ 2022-10-28 13:20  搬砖小伙子  阅读(305)  评论(0)    收藏  举报