@never_cache # 永不使用缓存,每次请求都是从新运行代码def v_code(request): from PIL import Image, ImageDraw, ImageFont import random # 这是一个产生随机颜色的函数 def get_color(): return random.randint(0, 255), random.randint(0, 255), random.randint(0, 255) img_obj = Image.new( "RGB", # 格式 (250, 35), # 尺寸 color=get_color() ) # 在图片中加文字 # 生成一个画笔对象 draw_obj = ImageDraw.Draw(img_obj) # 加载字体文件 font_obj = ImageFont.truetype("static/font/kumo.ttf", size=28) # 生成随机5位字符串 l = [] for i in range(5): n = str(random.randint(0, 9)) m = chr(random.randint(65, 90)) s = chr(random.randint(97, 122)) r = random.choice([n, m, s]) l.append(r) draw_obj.text( (i * 48 + 20, 0), # 字体在图片中的位置 r, # 内容 get_color(), # 颜色 font=font_obj ) # 5位随机验证码 v_code_str = ‘‘.join(l) # 每个请求对应自己的验证码 request.session[‘v_code‘] = v_code_str.upper() # 加干扰线 # width = 250 # 图片宽度(防止越界) # height = 35 # for i in range(2): # x1 = random.randint(0, width) # x2 = random.randint(0, width) # y1 = random.randint(0, height) # y2 = random.randint(0, height) # draw_obj.line((x1, y1, x2, y2), fill=get_color()) # # # 加干扰点 # for i in range(2): # draw_obj.point([random.randint(0, width), random.randint(0, height)], fill=get_color()) # x = random.randint(0, width) # y = random.randint(0, height) # draw_obj.arc((x, y, x+4, y+4), 0, 90, fill=get_color()) # 第一版:将生成的图片保存到文件中 # with open(‘aa.png‘,‘wb‘)as f: # img_obj.save(f,‘png‘) # print(‘图片已经生成‘) # with open(‘aa.png‘,‘rb‘)as f: # return HttpResponse(data,content_type=‘image/png‘) # 第二版:在内存中保存图片 from io import BytesIO tmp = BytesIO() # 生成一个io对象 img_obj.save(tmp, ‘png‘) data = tmp.getvalue() return HttpResponse(data, content_type=‘image/png‘)
原文地址:https://www.cnblogs.com/zhaoweihang/p/9282262.html
时间: 2024-08-30 13:02:52