Python Pillow——图像处理



使用 Python Pillow 库处理图像的基本操作包括打开、写入、显示和保存图像。Python Pillow 库提供了广泛的图像处理工具,为这些基本操作提供了简单的方法和可定制的选项。

在本教程中,您将学习使用 Pillow 库处理图像的几个重要方面,包括读取、显示、写入和保存图像。

读取图像

读取图像指的是打开和读取图像文件,并使其在 Python 程序中可用于操作和处理的过程。

在 Pillow 中,Image 模块提供open() 函数来加载给定的输入图像。当我们调用Image.open() 时,它会读取指定的图像文件,解码图像并创建一个代表该图像的 Pillow Image 对象。然后,此对象可用于各种图像处理任务。

使用 open() 函数读取图像

Image.open() 函数能够加载不同的图像格式,例如 JPEG、PNG、GIF、BMP、TIFF、ICO 等。

以下是此函数的语法和参数。

PIL.Image.open(fp, mode='r', formats = None)

其中,

  • fp——图像的文件名或路径或 URL(字符串格式)。

  • mode (可选)——mode 参数用于设置图像的打开模式,应将其设置为r

  • formats (可选)——要加载的格式列表或元组。这可以用作要加载的文件格式的限制。

此函数返回图像作为输出。在这里,为了显示图像,我们必须使用Image 模块的show() 函数。

示例

在这个例子中,我们通过字符串格式指定图像路径来加载图像,并将模式定义为r

from PIL import Image

#Load an image
loaded_image = Image.open("Images/butterfly.jpg", mode = 'r')
loaded_image.show()

#Saving the image
img.save("Output_Images/reading.png")

待使用的图像

butterfly

输出

reading

示例

在这个例子中,我们从图像 URL 加载图像。为此,我们必须使用urllib.request() 模块来读取图像 URL。

我们使用urllib.request 模块的urlretrieve() 函数从 URL 下载图像,并将其保存到本地文件系统中,并指定文件名。

import urllib.request
from PIL import Image
url = "https://tutorialspoint.com/images/logo.png"

#Download the image using urllib
urllib.request.urlretrieve(url, "image.png")

#Open the downloaded image in PIL
loading_image = Image.open("image.png", mode = 'r')

#Show the image
loading_image.show()

输出

 tutorialpoint logo

示例

在这个例子中,我们传入图像名称和formats = None 作为输入参数。

from PIL import Image

#load the image
loading_image = Image.open("pillow.jpg", formats = None)

#Show the image
loading_image.show()

输出

 pillow

写入图像

写入图像无非是从头创建新的图像文件或修改现有图像(例如绘图、像素操作和合成)。然后可以使用其他 Pillow 函数和方法进一步处理生成的图像或将其保存到磁盘。

使用 new() 方法写入图像

您可以使用 Image 模块中的new() 方法创建一个具有指定模式和大小的空白图像。这是一种生成具有所需特征的空白或未初始化图像的方法。

以下是Image.new() 的语法:

PIL.Image.new(mode, size, color)

其中,

  • mode——此参数指定图像的颜色模式,例如彩色图像的“RGB”或灰度图像的“L”。可用的模式取决于 Pillow 的版本和底层图像库的功能(例如,“RGB”、“RGBA”、“L”、“CMYK”等)。

  • size——此参数是一个元组,指定图像的宽度和高度(以像素为单位)。例如,要创建一个 300x200 像素的图像,我们可以使用 '(300, 200)'。

  • color' (可选)——此参数指定图像的初始颜色。这是一个可选参数,可以是单个颜色值或多通道图像的元组。对于大多数模式,默认颜色为黑色。

示例

在这个例子中,我们使用 Pillow 库中Image 模块的new() 方法创建一个黑色新图像。

from PIL import Image

#Create a new 300x200 pixel RGB image filled with white
img = Image.new('RGB', (300, 200), color='black')
img.show()

输出

writing img

示例

在这个例子中,我们使用 Pillow 的Image 模块中的new() 方法创建一个宽度为 600,高度为 600,颜色为蓝色的新图像。

from PIL import Image

#Create a new 300x200 pixel RGB image filled with white
img = Image.new('RGB', (500, 200), color='blue')
img.show()

输出

writing new

显示图像

显示图像是在屏幕上渲染图像以便您可以查看它。Pillow 提供 show() 方法,使用系统的默认图像查看器来显示图像。

使用 show() 方法显示图像

Image 模块中的show() 方法不需要任何参数或自变量。这很简单。

语法

以下是show() 函数的语法:

PIL.Image.show()

示例

在这个例子中,我们使用Image 模块的show() 函数显示open() 函数的输出。

from PIL import Image

#Open an image
image = Image.open("Images/hand writing.jpg")

#Display the image using the default image viewer
image.show()

输出

handwriting

在 Jupyter Notebook 环境中显示图像

如果我们在 Jupyter Notebook 环境中工作,则可以使用 IPython 的display() 函数直接在 Notebook 中显示图像。

以下是display() 函数的语法和参数:

IPython.display.display(image_name)

其中,

  • image_name——这是要显示的图像的名称。

示例

在这个例子中,我们使用IPython.display 模块的display() 函数显示图像。

from PIL import Image
from IPython.display import display

#Load the image
loading_image = Image.open("Images/tutorialspoint.png")

#Show the image
display(loading_image)

输出

tutorialspoint

在 GUI 应用程序中显示

如果我们正在构建图形用户界面 (GUI) 应用程序,则可以使用像 Tkinter 这样的 GUI 工具包(用于桌面应用程序)或像 Flask 或 Django 这样的 Web 框架(用于 Web 应用程序)在用户界面中显示图像。

示例

在这个例子中,我们使用 PIL 模块的 ImageTk 方法来显示图像输出。

import tkinter as tk
from PIL import Image, ImageTk

def display_image(image_path):
   root = tk.Tk()
   root.title("Image Viewer")
   
   image = Image.open(image_path)
   photo = ImageTk.PhotoImage(image)
   
   label = tk.Label(root, image=photo)
   label.image = photo
   label.pack()
   
   root.mainloop()

display_image("Images/tutorialspoint.png")

输出

image viewer

保存图像

在 Pillow 中保存图像是指将打开的图像保存到内存中,并使其在 Python 程序中可用于操作和处理。

Pillow 库的Image 模块提供save() 方法,允许您将指定的图像对象保存到内存或本地系统的指定位置。

使用 save() 函数保存图像

save() 方法允许我们将打开的图像保存为不同的文件格式,例如 JPG、PNG、PDF 等。此函数指定了保存图像的各种选项,包括格式、质量和其他参数。

以下是此函数的语法和参数。

PIL.Image.save(file, format=None, **params)

其中,

  • file——将保存图像到的文件路径或类文件对象。

  • format(可选)——保存图像的格式。如果未指定,Pillow 将尝试从文件扩展名确定格式。

  • params(可选)——取决于我们保存图像的格式的其他参数。

此函数将图像保存到指定位置,并使用指定的文件名。

示例

在这个例子中,我们使用 Pillow 库Image 模块的open() 函数打开指定的图像。然后通过将路径作为输入参数传递给save() 函数,将打开的图像保存到指定位置。

from PIL import Image
loading_image = Image.open("pillow.jpg")

#Show the image
loading_image.show()

#Save the image
loading_image.save("Images/saved_image.jpg")
print("Image saved")

输出

加载的图像:

pillow

保存的图像:

saved image

示例

在此示例中,我们使用其他可选参数将图像保存到指定位置。

from PIL import Image
#Load the image
loading_image = Image.open("Images/tutorialspoint.png")

#Show the image
loading_image.show()

#Save the image
loading_image.save("output Image/save_outputimg.png", format = "PNG", quality = 200)
print("Image saved")

输出

加载的图像:

loaded image

保存的图像:

save images

我们可以使用save() 方法以各种格式保存图像,并根据我们的特定用例需要控制质量和其他特定于格式的选项。

广告