Python: Pillow (a fork of PIL)
Python Imaging Library(PIL的扩展)是Python语言中事实上的图像处理包。它包含了轻量级的图像处理工具,有助于编辑、创建和保存图像。对Python Imaging Library的支持在2011年停止了,但一个名为pillow的项目分叉了最初的PIL项目,并为其添加了Python3.x的支持。Pillow被宣布为PIL的替代品,供未来使用。Pillow支持大量的图像文件格式,包括BMP、PNG、JPEG和TIFF。该库鼓励通过创建新的文件解码器在库中增加对较新格式的支持。
这个模块没有预装在Python中。所以要安装它,在命令行中执行以下命令。
pip install pillow
注意:几个Linux发行版往往都预装了Python和PIL。
从Pillow开始
1.使用open()打开一个图像:PIL.Image.Image类代表了图像对象。这个类提供了open()方法,用来打开图像。
例子:我们假设图像是。
from PIL import Image
# test.png => location_of_image
img = Image.open(r"test.png")
注意:只有当图像与Python程序在同一目录下时,图像的位置才应该是相对的,否则应该提供图像的绝对(完整)路径。
2.使用show()显示图像:该方法用于显示图像。为了显示图像,Pillow首先将图像转换为.png格式(在Windows操作系统上),并将其存储在一个临时缓冲区中,然后再显示。因此,由于将图像格式转换为.png,原始图像文件格式的一些属性可能会丢失(如动画)。因此,建议只为测试目的使用这种方法。
from PIL import Image
img = Image.open(r"test.png")
img.show()
输出:
3.获得关于已打开图像的信息
A) 获取图像的模式(颜色模式):图像的模式属性告诉了图像中像素的类型和深度。一个1位像素的范围是0-1,一个8位像素的范围是0-255。这个模块提供了不同的模式。其中一些是
模式 | 说明 |
---|---|
1 | 1位像素,黑与白 |
L | 8位像素,灰度 |
P | 8位像素,使用调色板映射到任何其他模式 |
RGB | 3×8位像素,真彩色 |
RGBA | 4×8位像素,带透明掩码的真彩色 |
示例:
from PIL import Image
img = Image.open(r"test.png")
print(img.mode)
输出:
RGBA
注意:请参考文件以了解这些模式。
B) 获取图像的大小:该属性提供了图像的大小。它返回一个包含宽度和高度的元组。
示例:
from PIL import Image
img = Image.open(r"test.png")
print(img.size)
输出:
(180, 263)
C) 获取图像的格式:该方法返回图像文件的格式。
from PIL import Image
img = Image.open(r"test.png")
print(img.format)
输出:
PNG
4.使用rotate()旋转图像:旋转图像后,图像中没有像素值的部分被填充为黑色(对于非阿尔法图像)和完全透明的像素(对于支持透明的图像)。
示例:
from PIL import Image
angle = 40
img = Image.open(r"test.png")
r_img = img.rotate(angle)
输出:
5.使用resize()调整图像大小:在调整过程中会发生插值,由于插值的原因,无论图像是被上调(调整到比原来高的尺寸)还是下调(调整到比原来低的图像),其质量都会发生变化。因此,resize()应该被谨慎使用,并为重采样参数提供合适的值。
示例:
from PIL import Image
size = (40, 40)
img = Image.open(r"test.png")
r_img = img.resize(size)
r_img.show()
输出:
6.使用save()保存图像:当使用save()方法时,Destination_path必须有图像的文件名和扩展名。如果扩展名在格式参数中被指定,扩展名可以在Destination_path中省略。
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)