pillow模块快速学习

Posted ryxiong-blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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>

 

以上是关于pillow模块快速学习的主要内容,如果未能解决你的问题,请参考以下文章

python图像处理模块Pillow的学习

Python学习笔记__13.1章 三方模块 Pillow

如何快速学习 Drools 或其他规则引擎 [关闭]

快速学习kibana搜索语法

python学习:通过python实现快速ping

《Python快速编程入门(第2版)》#学习笔记01# |第一章 :Python概述 (Python发展历程开发工具模块)