Python图像处理PIL库详解

admin 阅读:53 2024-02-29

Pillow 也叫 PIL,全称为 Python Imaging Library,已经是 Python 平台事实上的图像处理标准库了。PIL 功能非常强大,并且 API 非常简单易用。

我们可以使用 pip 来安装 PIL,注意用 pip 安装 PIL时,不能用 pip install PIL,必须用 pip install pillow 命令来安装。

使用 PIL 模块的 Image

用 Image 类的 thumbnail 函数对我们本地磁盘的图形文件进行缩放操作。注意:thumbnail 函数缩放图片比例必须为大于 0 小于等于 1,并且函数对图片缩放的高和宽比例必须一致,如果不一致,以缩放比例最大的参数为准。

from PIL import Image

img = Image.open("d:/test.png")    # 确保 d 盘下存在 test.png 图片文件
w = img.size[0]  # 图片宽度
h = img.size[1]  # 图片高度
img.thumbnail((w * 0.5, h * 0.5))  # 缩放的参数必须大于 0 且 小于等于 1
img.save("d:/testcopy.png")        # 缩放后另存为 testcopy.png

我们可以用 Image 类的 resize 函数进对图片进行非等比例缩放。

from PIL import Image

img = Image.open("d:/test.png")  # 确保 d 盘下存在 test.png 图片文件
w = img.size[0]  # 图片宽度
h = img.size[1]  # 图片高度
img.resize((w * 2, h * 3))       # 缩放的倍数必须为正整数
img.save("d:/testcopy.png")      # 缩放后另存为 testcopy.png

使用 PIL 模块的其它常用函数

PIL 模块功能非常丰富,它不但提供了很多有用的处理图片的类库,还提供了一系列绘图的类库,下面我们使用常用的 PIL 模块的类库做一个项目开发中常见的需求——生成字母验证码图片。我们生成验证码图片后,存储在项目目录下(文件名为:code.jpg)

from PIL import Image, ImageDraw, ImageFont, ImageFilter
import random

# 生成随机大写字母,ascii为 [65, 90],
def rndChar():
    return chr(random.randint(65, 90))

# 生成填充颜色,返回 RGB 值,每个颜色值在(128, 255)之间
def rndColor():
    return (random.randint(128, 255), random.randint(128, 255), random.randint(128, 255))

# 生成字体颜色,返回 RGB 值,每个颜色值在(0, 127)之间,在此我只是为了不和背景颜色重叠,大家可以自行设置。
def rndColor2():
    return (random.randint(0, 127), random.randint(0, 127), random.randint(0, 127))

# 图片大小(存放 5 个随机字母),宽度为:400,高度为:80
width = 80 * 5
height = 80

# 黑色背景,RGB值为:(0, 0, 0)
image = Image.new('RGB', (width, height), (0, 0, 0))

# 创建 Font 对象,设定字体大小为 36
font = ImageFont.truetype('C:/Windows/Fonts/verdana.ttf', 36)

# 创建Draw对象
draw = ImageDraw.Draw(image)

# 填充每个像素
for x in range(width):
    for y in range(height):
        draw.point((x, y), fill=rndColor())

# 输出文字
for t in range(5):
    draw.text((80 * t + 10, 10), rndChar(), font=font, fill=rndColor2())

# 让验证码图片模糊
image = image.filter(ImageFilter.BLUR)
image.save('code.jpg', 'jpeg')

Python 有大量的功能丰富的第三方模块,我们在使用第三方模块时,可以对某些函数的功能进行猜测,如果猜测的结果不对时,要学会查找第三模块的官方文档来进行学习。

本节重要知识点

会使用 PIL 做图片处理。

会自己查找学习 PIL 其它相关类库。

声明

1、部分文章来源于网络,仅作为参考。
2、如果网站中图片和文字侵犯了您的版权,请联系1943759704@qq.com处理!