zoukankan      html  css  js  c++  java
  • Python生成随机验证码

    安装PIL模块:

    pip3 install pillow

    一、基本使用

    1、创建图片

    from PIL import Image
    
    image = Image.new(mode="RGB", size=(120, 30), color=(255, 255, 255))
    
    # 在图片查看器中打开
    # image.show()
    
    # 保存在本地
    with open("1.png", "wb") as f:
        image.save(f, format="png")

    2、创建画笔,用于在图片上画任意内容

    image = Image.new(mode="RGB", size=(120, 30), color=(255, 255, 255))
    draw = ImageDraw.Draw(image, mode="RGB")

    3、画点

    image = Image.new(mode="RGB", size=(120, 30), color=(255, 255, 255))
    draw = ImageDraw.Draw(image, mode="RGB")
    # 第一个参数:坐标
    # 第二个参数:颜色
    draw.point([100, 100], fill="red")
    draw.point([300, 300], fill=(255, 255, 255))

    4、画线

    image = Image.new(mode="RGB", size=(120, 30), color=(255, 255, 255))
    draw = ImageDraw.Draw(image, mode="RGB")
    # 第一个参数:表示起始坐标和结束坐标
    # 第二个参数:表示颜色
    draw.line((100,100,100,300), fill="red")
    draw.line((100,100,300,100), fill=(255, 255, 255))

    5、画圆

    image = Image.new(mode="RGB", size=(120, 30), color=(255, 255, 255))
    draw = ImageDraw.Draw(image, mode="RGB")
    # 第一个参数:起始坐标和结束坐标(圆要画在其中间)
    # 第二个参数:开始角度
    # 第三个参数:结束角度
    # 第四个参数:颜色
    draw.arc((100,100,300,300), 0, 90, fill="red")

    6. 写文本

    image = Image.new(mode="RGB", size=(120, 30), color=(255, 255, 255))
    draw = ImageDraw.Draw(image, mode="RGB")
    # 第一个参数:起始坐标
    # 第二个参数:写入内容
    # 第三个参数:颜色
    draw.text([0,0], "python", "red")

    7、特殊字体文字

    image = Image.new(mode="RGB", size=(120, 30), color=(255, 255, 255))
    draw = ImageDraw.Draw(image, mode="RGB")
    # 第一个参数:字体文件路径
    # 第二个参数:字体大小
    font = ImageFont.truetype("kumo.ttf", 28)
    # 第一个参数:起始坐标
    # 第二个参数:写入内容
    # 第三个参数:颜色
    # 第四个参数:字体
    draw.text([0, 0], "python", "red", font=font)

    字体文件,或者搜索 TrueType 字体文件 下载自己喜欢的字体。

    二、图片验证码示例

    import random
    from PIL import Image, ImageDraw, ImageFont
    
    def get_random_color():
        """获取随机颜色"""
        return (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
    
    def get_valid_code():
        """生成随机验证码"""
        image = Image.new("RGB", (136, 36), "rgb(255, 255, 255)")
        draw = ImageDraw.Draw(image)
        font = ImageFont.truetype("static/kumo.ttf", size=34)
        # 生成5个随机字母或数字
        valid_list = []
        for i in range(1, 6):
            number = str(random.randint(0, 9))
            lower_letter = chr(random.randint(97, 122))
            upper_letter = chr(random.randint(65, 90))
            random_char = random.choice([number, lower_letter, upper_letter])
            draw.text((i*20, 0), random_char, fill="black", font=font)
            valid_list.append(random_char)
    
        width = 136
        height = 36
        # 画干扰线
        for i in range(3):
            x1 = random.randint(0, width)
            y1 = random.randint(0, height)
            x2 = random.randint(0, width)
            y2 = random.randint(0, height)
            draw.line((x1, y1, x2, y2), fill=get_random_color())
        # 画干扰点
        for i in range(100):
            x = random.randint(0, width)
            y = random.randint(0, height)
            draw.point([x, y], fill=get_random_color())
    
        valid_str = "".join(valid_list)
        # valid_str保存在session中,在登录时用来做验证
        # request.session["valid_str"] = valid_str
        return image, valid_str
    
    if __name__ == "__main__":
        image, code = get_valid_code()
        # 1、直接打开
        image.show()
    
        # 2、保存在本地
        # with open("code.png", "wb") as f:
        #     image.save(f, format="png")
    
        # 3、写入内存(Python3)
        # import io
        # stream = io.BytesIO()
        # image.save(stream, "png")
        # valid_image = stream.getvalue()
        # stream.close()
        # 从内存中获取刚生成的验证码图片,返回给前端
        # return HttpResponse(valid_image)
    
        # 4、写入内存(Python2)
        # import StringIO
        # stream = StringIO.StringIO()
        # image.save(stream, "png")
        # stream.getvalue()

    Django登录实现验证码认证示例.zip

  • 相关阅读:
    Hibernate关系映射(一) 基于外键的单向一对一
    Hibernate开发环境搭建
    Java创建和读取Json
    Json 简易教程
    jQuery Validate验证框架详解
    asp.net Core 3.1配置log4net
    HTTP 错误 500.21
    SQL中数据库 无法访问,并且数据库的属性中 使用人数、大小、可用空间全是不可用
    What is a CGFloat?
    Swift中的CGPoint ,CGSize 、CGRect、CGFloat
  • 原文地址:https://www.cnblogs.com/believepd/p/10463811.html
Copyright © 2011-2022 走看看