zoukankan      html  css  js  c++  java
  • Django 生成六位随机图片验证码

    from PIL import Image, ImageDraw, ImageFont
    from io import BytesIO
    import random
    
    
    def get_valid_img(request):
        #  生成随机颜色
        def get_random_color():
            return (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
    
        # 生成随机背景色的图片   --  改版: 背景色为幽灵白
        img = Image.new('RGB', (360, 38), (248, 248, 255))
        draw = ImageDraw.Draw(img)
        font = ImageFont.truetype('static/font/f1.TTF', 32)
    
        code = ""  # 验证码明文
        # 生成随机验证码
        for i in range(6):
            random_num = str(random.randint(0, 9))  # 生成随机数字
            random_up = chr(random.randint(65, 90))  # 生成随机大写字母
            random_low = chr(random.randint(97, 122))  # 生成随机小写字母
    
            # 随机选择数字,大写字母,小写字母中的一个
            random_char = random.choice([random_low, random_up, random_num])
    
            # 在生成的随机背景色图片上绘制随机颜色的随机验证码
            draw.text((i * 51 + 50, 0), random_char, get_random_color(), font=font)
    
            # 保存生成的随机验证码
            code += random_char
        print("验证码是: ", code)
    
        width = 350
        height = 38
        # 添加噪线
        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.line((x1, y1, x2, y2), fill=get_random_color())
        # 添加噪点
        for i in range(30):
            draw.point([random.randint(0, width), random.randint(0, height)], fill=get_random_color())
            x = random.randint(0, width)
            y = random.randint(0, height)
            draw.arc((x, y, x + 4, y + 4), 0, 90, fill=get_random_color())
    
        # 将生成的验证码图片保存在内存中
        f = BytesIO()  # 句柄
        img.save(f, 'png')  # 保存
        data = f.getvalue()  # 验证码图片数据
    
        # 将验证码保存在各自的session中,方便不同浏览器之间进行验证
        request.session['code'] = code
    
        return HttpResponse(data)
  • 相关阅读:
    洛谷 P3868 [TJOI2009]猜数字
    洛谷 P2661 信息传递
    hdu 5418 Victor and World
    洛谷 P5024 保卫王国
    洛谷 P2470 [SCOI2007]压缩
    双栈排序 2008年NOIP全国联赛提高组(二分图染色)
    理想的正方形 HAOI2007(二维RMQ)
    10.23NOIP模拟题
    疫情控制 2012年NOIP全国联赛提高组(二分答案+贪心)
    图论模板
  • 原文地址:https://www.cnblogs.com/knowledgeYang/p/10307158.html
Copyright © 2011-2022 走看看