在 Python 中处理图像?
Pillow 是 Python 中最流行且被认为是默认的图像处理库之一。Pillow 是 Python 图像库(PIL)的更新版本,支持一系列简单和高级的图像处理功能。它也是其他 Python 库(如 sciPy 和 Matplotlib)中简单图像支持的基础。
安装 Pillow
在开始之前,我们需要 Python 和 Pillow。对于 Linux 系统,Pillow 可能已经存在,因为包括 Fedora、Debian/Ubuntu 和 ArchLinux 在内的主要 Linux 发行版都将 Pillow 包含在以前包含 PIL 的软件包中。
最简单的安装方法是使用 pip
pip install pillow
如何加载和显示图像
首先,我们需要一个测试图像来演示使用 Python Pillow 库的一些重要功能。
我使用“统一雕像”照片作为示例图像。下载图像并将其保存到当前工作目录中。
#Load and show an image with Pillow from PIL import Image #Load the image img = Image.open('statue_of_unity.jpg') #Get basic details about the image print(img.format) print(img.mode) print(img.size) #show the image img.show()
结果
JPEG RGB (400, 260)
在上面,图像使用 Image 类上的 open() 函数直接加载。这将返回一个图像对象,其中包含图像的像素数据以及有关图像的详细信息。
图像上的 format 属性将报告图像格式(例如 png、jpeg),mode 将报告像素通道格式(例如 CMYK 或 RGB),而 size 将报告图像以像素为单位的尺寸(例如 400*260)。
show() 函数将使用操作系统的默认应用程序显示图像。
将图像转换为灰度
要将图像转换为灰度,显示它然后保存它非常容易,只需执行以下操作即可
#Import required library from PIL import Image #Read an image & convert it to gray-scale image = Image.open('statue_of_unity.jpg').convert('L') #Display image image.show() #Save image image.save('statue_of_unity_gs.jpg')
结果
运行上述程序后,将在当前工作目录中创建一个名为“statue_of_unity_gs.jpg”的文件。
转换为其他图像类型
将一种类型的图像(jpeg)转换为另一种类型(例如 png)也非常容易。
from PIL import Image image = Image.open('statue_of_unity.jpg') image.save('statue_of_unity.png')
创建一个新的图像文件并保存在我们的默认目录中。
调整图像大小
我们当前图像文件的尺寸为 400 * 260px。如果我们想调整它的大小,并使其大小为 440 * 600px,可以通过以下方式实现:
from PIL import Image
image = Image.open('statue_of_unity.jpg') newImage = image.resize((440, 600)) newImage.save('statue_of_unity_440&600.jpg')
一个名为“statue_of_unit_440*600.jpg”的新文件,大小为 440 * 600px,被创建并保存在当前工作目录中。
如您所见,这会将我们的原始图像放大到所需的尺寸,而不是裁剪它,这可能是您不希望看到的。
如果您想裁剪现有的图像,可以使用以下方法:
image.crop(box=None)
旋转图像
下面的程序加载图像,将其旋转 45 度,并使用外部查看器显示它。
from PIL import Image image = Image.open('statue_of_unity.jpg') image.rotate(45).show()
创建缩略图
下面的程序将创建当前工作目录中所有 jpeg 图像的 128*128 缩略图。
from PIL import Image import glob, os size = 128, 128 for infile in glob.glob("*.jpg"): file, ext = os.path.splitext(infile) image = Image.open(infile) image.thumbnail(size, Image.ANTIALIAS) image.save(file + ".thumbnail", "JPEG")
结果
将返回我当前目录(c:\python\python361)中所有 jpeg 文件的缩略图,包括“statue_of_unity.jpg”图像。