📜  Python:枕头(PIL 的一个分支)

📅  最后修改于: 2022-05-13 01:55:31.147000             🧑  作者: Mango

Python:枕头(PIL 的一个分支)

Python Imaging Library(PIL 的扩展)是Python语言事实上的图像处理包。它结合了轻量级的图像处理工具,有助于编辑、创建和保存图像。对Python Imaging Library 的支持于 2011 年停止,但一个名为枕头的项目分叉了原始 PIL 项目并为其添加了 Python3.x 支持。 Pillow 被宣布为 PIL 的替代品,以备将来使用。 Pillow 支持大量的图像文件格式,包括 BMP、PNG、JPEG 和 TIFF。该库鼓励通过创建新的文件解码器来添加对库中更新格式的支持。
这个模块没有预装Python。因此,要安装它,请在命令行中执行以下命令:

pip install pillow

注意:一些 Linux 发行版倾向于预装Python和 PIL。

从枕头开始

1. 使用 open() 打开图像: PIL.Image.Image 类表示图像对象。此类提供用于打开图像的 open() 方法。

示例:假设图像是:

Python3
from PIL import Image
 
 
# test.png => location_of_image
img = Image.open(r"test.png")


Python3
from PIL import Image
 
 
img = Image.open(r"test.png")
img.show()


Python3
from PIL import Image
 
 
img = Image.open(r"test.png")
print(img.mode)


Python3
from PIL import Image
 
 
img = Image.open(r"test.png")
print(img.size)


Python3
from PIL import Image
 
 
img = Image.open(r"test.png")
print(img.format)


Python3
from PIL import Image
 
 
angle = 40
img = Image.open(r"test.png")
r_img = img.rotate(angle)


Python3
from PIL import Image
 
 
size = (40, 40)
img = Image.open(r"test.png")
r_img = img.resize(size)
 
r_img.show()


Python3
from PIL import Image
 
 
size = (40, 40)
img = Image.open(r"test.png")
r_img = img.resize(size, resample = Image.BILINEAR)
 
# resized_test.png => Destination_path
r_img.save("resized_test.png")
 
# Opening the new image
img = Image.open(r"resized_test.png")
print(img.size)


注意:仅当图像与Python程序位于同一目录中时,图像的位置才应该是相对的,否则应提供图像的绝对(完整)路径。

2.使用show()显示图像:该方法用于显示图像。为了显示图像 Pillow 首先将图像转换为 .png 格式(在 Windows 操作系统上)并将其存储在临时缓冲区中,然后显示它。因此,由于将图像格式转换为 .png,原始图像文件格式的某些属性可能会丢失(如动画)。因此,建议仅将此方法用于测试目的。

Python3

from PIL import Image
 
 
img = Image.open(r"test.png")
img.show()

输出:

python-pil-1

3.获取打开的图片信息

A)获取图像的模式(颜色模式):图像的模式属性告诉图像中像素的类型和深度。 1 位像素的范围为 0-1,8 位像素的范围为 0-255。该模块提供了不同的模式。其中很少有:

ModeDescription
11-bit pixels, black and white
L8-bit pixels, Greyscale
P8-bit pixels, mapped to any other mode using a color palette
RGB3×8-bit pixels, true color
RGBA4×8-bit pixels, true color with transparency mask

例子:

Python3

from PIL import Image
 
 
img = Image.open(r"test.png")
print(img.mode)

输出:

RGBA

注意:请参阅文档以了解这些模式。

B) 获取图像的大小:该属性提供图像的大小。它返回一个包含宽度和高度的元组。

例子:

Python3

from PIL import Image
 
 
img = Image.open(r"test.png")
print(img.size)

输出:

(180, 263)

C) 获取图片格式:该方法返回图片文件的格式。

Python3

from PIL import Image
 
 
img = Image.open(r"test.png")
print(img.format)

输出:

PNG

4. 使用 rotate() 旋转图像:旋转图像后,图像中没有像素值的部分用黑色填充(对于非 alpha 图像)和完全透明的像素(对于支持透明度的图像)

例子:

Python3

from PIL import Image
 
 
angle = 40
img = Image.open(r"test.png")
r_img = img.rotate(angle)

输出:

python-pil-2

5. 使用 resize() 调整图像大小:在调整大小的过程中发生插值,因此无论是放大(调整到比原始更高的尺寸)还是缩小(调整到比原始更低的图像),图像的质量都会发生变化.因此 resize() 应该谨慎使用,同时为重采样参数提供合适的值。

例子:

Python3

from PIL import Image
 
 
size = (40, 40)
img = Image.open(r"test.png")
r_img = img.resize(size)
 
r_img.show()

输出:

python-pil-3

6. 使用 save() 保存图像:使用 save() 方法时,Destination_path 还必须具有图像文件名和扩展名。如果在格式参数中指定了扩展名,则可以在 Destination_path 中省略扩展名。

Python3

from PIL import Image
 
 
size = (40, 40)
img = Image.open(r"test.png")
r_img = img.resize(size, resample = Image.BILINEAR)
 
# resized_test.png => Destination_path
r_img.save("resized_test.png")
 
# Opening the new image
img = Image.open(r"resized_test.png")
print(img.size)

输出:

(40, 40)