超详细!深入介绍Python的Pillow库

目录

一.引言   

二.Pillow:PIL的现代化实现

三.安装

四.使用

        1.基本功能

                (1) 图像加载与显示                     

                (2) 图像转换

                (3) 图像缩放与裁剪

                (4) 图像旋转与翻转

        2.高级功能

        (1) 图像滤镜

        (2) 通道操作

        3.扩展功能:文字与图像的结合

五.性能与并发

六.总结



一.引言   

        Python Imaging Library (PIL) 是 Python 中用于图像处理的一个非常强大的库。虽然它最初是由 Fredrik Lundh 创建并维护的,但现在我们更常用的是它的派生版本——Pillow,它是针对 PIL 的的兼容分支,并保持了与PIL接口的一致,同时支持更多的功能和格式。

二.Pillow:PIL的现代化实现

        Pillow 是在 PIL 停止维护之后,由社区发起并的,它兼容了大部分 PIL 的功能,并引入了许多新功能。Pillow 为图像处理提供了丰富的功能,比如图像的创建、编辑、转换、增强、过滤器应用等,几乎涵盖了日常图像处理的各个方面。

三.安装

        安装 Pillow 非常简单,可以使用 pip 命令直接安装:

pip install pillow

四.使用

        1.基本功能

                Pillow 可以处理几乎所有的主流图像格式,包括 PNG、JPEG、GIF、BMP 等。

                (1) 图像加载与显示                     
from PIL import Image

# 打开图像
image = Image.open('example.jpg')
# 显示图像
image.show()

                        在上面的代码中,Image.open() 函数可以从指定路径加载图像,show() 方法则                  用于在系统默认的图像查看器中显示该图像。 

                (2) 图像转换

                Pillow 支持将图像从一种模式转换为另一种模式。常见的模式包括:

                        'L':灰度模式

                        'RGB':彩色模式

                        'CMYK':印刷用的四分色模式

# 将RGB图像转换为灰度图像
gray_image = image.convert('L')
gray_image.show()
                (3) 图像缩放与裁剪

                Pillow 提供了简单的方法来对图像进行缩放和裁剪:

# 调整图像大小
resized_image = image.resize((200, 200))
resized_image.show()

# 裁剪图像
cropped_image = image.crop((50, 50, 150, 150))
cropped_image.show()
                (4) 图像旋转与翻转

                Pillow 还提供了图像旋转和翻转的功能:

# 旋转图像
rotated_image = image.rotate(45)
rotated_image.show()

# 水平翻转图像
flipped_image = image.transpose(Image.FLIP_LEFT_RIGHT)
flipped_image.show()

        2.高级功能

                除了上述的基础功能,Pillow 还提供了一些更高级的图像处理功能,比如图像过滤器、通道操作等。

        (1) 图像滤镜

                Pillow 内置了多种滤镜,常见的有模糊滤镜、轮廓滤镜、锐化滤镜等:

from PIL import ImageFilter

# 应用模糊滤镜
blurred_image = image.filter(ImageFilter.BLUR)
blurred_image.show()

# 应用轮廓滤镜
contour_image = image.filter(ImageFilter.CONTOUR)
contour_image.show()
        (2) 通道操作

                Pillow 允许我们对图像的各个颜色通道进行独立操作。比如,我们可以拆分图像的 RGB 通道,并单独处理某一通道:

# 拆分通道
r, g, b = image.split()

# 操作通道,如增强红色通道
enhanced_r = r.point(lambda i: i * 1.5)
# 合并通道
merged_image = Image.merge('RGB', (enhanced_r, g, b))
merged_image.show()

        3.扩展功能:文字与图像的结合

                Pillow 支持在图像上绘制文字或图形,这一功能对于创建水印、生成动态图片等非常有用。ImageDraw 模块允许你在图像上进行绘制操作:

from PIL import ImageDraw, ImageFont

# 创建一个新的白色图像
image = Image.new('RGB', (300, 100), color = 'white')

# 初始化绘图对象
draw = ImageDraw.Draw(image)

# 定义字体和大小
font = ImageFont.truetype("arial.ttf", 40)

# 在图像上绘制文字
draw.text((50, 25), "Hello, Pillow!", font=font, fill=(0, 0, 0))

# 显示图像
image.show()

五.性能与并发

        在图像处理的高并发场景中,Pillow 的性能表现一直是讨论的热点。Pillow 并不是为高性能设计的,但它能够通过使用 ImageOpsImageChops 等高效模块,进行一些批量操作来优化性能。此外,Pillow 也支持 Python 的多线程和多进程,并且可以与 Numpy 配合使用以实现更快的矩阵操作。这里作者就不做过多讲解了,感兴趣的读者可以自己去了解。

六.总结

        Pillow 作为 Python 图像处理的标准库之一,功能全面且易于使用。它为图像处理提供了从基本操作到高级功能的一整套解决方案。尽管 Pillow 不是为高性能设计的,但在一般应用中,它已经足够应付绝大多数场景。通过结合 Numpy 和多线程/多进程,开发者可以进一步提升 Pillow 的性能。

        无论是简单的图像处理任务还是复杂的图像操作,Pillow 都能为开发者提供灵活的解决方案,是 Python 图像处理领域不可或缺的利器。       

  • 19
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值