zoukankan      html  css  js  c++  java
  • pillow模块快速学习

    一、pillow的简单使用

    1.安装

    方式一:

    如果配置了python中的script路径为环境变量,直接cmd中执行如下命令:

    pip3 install pillow

    方式二:

    通过编译器环境,如pycharm中的settings->project interpreter-->点击+号安装

    2.快速使用

    1.创建图片对象

    from PIL import Image
    img = Image.new(mode='RGB', size=(120, 30), color=(255, 255, 255))  # 创建一个图片对象,可以在对象中画图写字
     
    # 在图片查看器中打开
    # img.show() 
     
    # 保存在本地
    with open('code.png','wb') as f:
        img.save(f,format='png')

    2.创建一个画笔对象,用于在图片对象上作画

    img = Image.new(mode='RGB', size=(120, 30), color=(255, 255, 255))
    draw = ImageDraw.Draw(img, mode='RGB')  # 指定图片创建画笔对象

    3.画点

    img = Image.new(mode='RGB', size=(120, 30), color=(255, 255, 255))
    draw = ImageDraw.Draw(img, mode='RGB')
    # 第一个参数:表示坐标
    # 第二个参数:表示颜色
    draw.point([100, 100], fill="red")  # fill参数用于指定画笔的颜色
    draw.point([300, 300], fill=(255, 255, 255))  # rgb表示方式

    4.画线

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

    5.画圆

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

    6.写文本

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

    7.指定字体写文本

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

    3.登录图片验证码生成

    生成随机验证码图片的函数

    import os
    import string
    import random
    from io import BytesIO
    from PIL import Image,ImageDraw,ImageFont
    from AliCRM import settings  # 项目中的settings文件,配置了BASEDIR路径,在这里无需关注
    ​
    ​
    def get_authcode_img(request):
        """
        获取随机验证码,带干扰噪点,
        :param request: request请求,用于将验证码存放在session中
        :return: 返回验证码图片的数据内容
        """
        def get_background_color():  # 定义一个获取图片背景/噪点颜色的函数,产生浅色
            color = tuple((random.choices(range(160,256),k=3)))
            return color
    ​
        def get_content_color():  # 定义一个获取文字颜色的函数,产生深色
            color = tuple((random.choices(range(0,100),k=3)))
            return color
    ​
        img_obj = Image.new("RGB",(117,34),get_background_color())  # 创建一个图片对象
        draw_obj = ImageDraw.Draw(img_obj)  # 通过图片对象生成一个画笔对象
        font_path = os.path.join(settings.BASE_DIR,"statics","font","cerepf__.ttf")  # 获取字体,注意有些字体无法显示数字
        font_obj = ImageFont.truetype(font_path,32)  # 创建一个字体对象
        random_code = ''  # 用户验证的字符串
        all_char = string.ascii_letters+string.digits
        for i in range(4):
            a = random.choice(all_char)
            random_code += a
    ​
        draw_obj.text((22,-3),random_code,fill=get_content_color(),font=font_obj)
    ​
        width = 117
        height = 34# 添加噪线
        for i in range(5):  # 添加5条干扰线
            # 两个坐标点确定一条线
            x1 = random.randint(0,width)
            y1 = random.randint(0,height)
            x2 = random.randint(0,width)
            y2 = random.randint(0,height)
            draw_obj.line((x1,y1,x2,y2),fill=get_background_color())  # 画噪线
    # 添加噪点
        for i in range(30):
            draw_obj.point((random.randint(0,width),random.randint(0,height)),fill=get_background_color())
    ​
        f = BytesIO()  # 生成内存操作符-句柄
        img_obj.save(f,"png")  # 将图片存在内存中
        data = f.getvalue()
        # 获取句柄中的内容
    # # 存验证码方式:1.存在全局变量(不可取,多个用户会顶替)2.存在各自客户的session中
        # # 方式1
        # global valid_str
        # valid_str = random_code
    # 方式二,推荐
        request.session["authcode"] = random_code
        return data
    get_authcode_img函数

    项目中登录验证码

    # 验证码视图类
    class GetAuthImg(views.View):
        """获取验证码视图类"""def get(self, request):
            data = authcode.get_authcode_img(request)  # 调用生成验证码的函数生成验证码
            print("验证码:",request.session.get("authcode"))
            return HttpResponse(data)

    验证码路由

    urlpatterns = [
        # 验证码url
        url(r'^get_auth_img/', accounts.GetAuthImg.as_view(), name="get_auth_img"),
    ]

    前端代码使用

    <img id="authImg" src="{% url 'get_auth_img' %}" alt="验证码">
    
    <!--点击验证码图片刷新js-->
    <script>
        // 验证码刷新
        $("#authImg").on("click", function () {
        $("#authImg")[0].src += "?"
        })
    </script>
    衣带渐宽终不悔,为伊消得人憔悴!
  • 相关阅读:
    第04组 Alpha冲刺(4/6)
    第04组 Alpha冲刺(3/6)
    第04组 Alpha冲刺(2/6)
    第04组 Alpha冲刺(1/6)
    第04组 团队Git现场编程实战
    第04组 团队项目-需求分析报告
    团队项目-选题报告
    第二次结对编程作业
    第04组 Alpha冲刺(6/6)
    第04组 Alpha冲刺(5/6)
  • 原文地址:https://www.cnblogs.com/ryxiong-blog/p/11054895.html
Copyright © 2011-2022 走看看