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')

浙公网安备 33010602011771号