Python Pillow 简明教程

Python Pillow - Working with Images

打开、写入、显示和保存图像是在使用 python pillow 库处理图像时的基本操作。Python Pillow 库为图像处理任务提供广泛的工具,为这些基本操作提供简单的函数和可自定义的选项。

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

Reading Images

读取图像是指打开和读取图像文件并将它们置于 Python 程序中以便于处理和操作的过程。

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

Reading images using open() function

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

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

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

其中,

  1. fp - 字符串格式内的图像文件名、路径或 URL。

  2. mode (optional) - mode 参数用于将图像设置为打开模式,应将其指定为 r

  3. formats (optional) - 要加载的格式列表或元组。这可以用作要加载的文件格式的限制。

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

Example

在此示例中,我们通过以字符串格式指定图像的路径并定义模式为 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 original image

Output

reading

Example

在这个示例中,我们从图像 URL 加载图像。因此,要执行该操作,我们必须使用 urllib.request() 模块来读取图像 URL。

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

import urllib.request
from PIL import Image
url = "https://www.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()

Output

logo

Example

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

from PIL import Image

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

#Show the image
loading_image.show()

Output

pillow

Writing Images

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

Writing images using new() method

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

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

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

其中,

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

  2. size − 此参数是一个元组,用于指定图像的宽度和高度(以像素为单位)。例如,要创建一个像素大小为 300x200 的图像,我们可以使用“(300,200)”。

  3. color' (optional) − 此参数指定图像的初始颜色。它是可选参数,并且可以是单个颜色值或多通道图像的元组。大多数模式的默认颜色是黑色。

Example

在这个示例中,我们使用 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()

Output

writing img

Example

在这里,在这个示例中,我们使用 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()

Output

writing new

Displaying Image

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

Displaying images using the show() method

Image 模块中的 show() 方法不需要任何参数或参数。这是一个简单的过程。

Syntax

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

PIL.Image.show()

Example

在这个示例中,我们使用 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()

Output

handwriting

Displaying Images in the Jupyter Notebook Environment

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

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

IPython.display.display(image_name)

其中,

  1. image_name − 这是要显示的图像的名称。

Example

在这个示例中,我们使用 display() 函数显示 IPython.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)

Output

tp logo

Displaying in a GUI Application

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

Example

在这个示例中,我们使用 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")

Output

image viewer

Saving Images

在 Pillow 中保存图像指的是将打开的图像保存到内存中,并使其可以在 Python 程序中进行处理和修改。

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

Saving images using save() function

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

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

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

其中,

  1. file − 将图像保存到的文件路径或类似文件对象。

  2. format(optional) − 用于保存图像的格式。如果未指定 Pillow 会尝试从文件扩展名中确定格式。

  3. params(optional) − 依赖于我们保存图像的格式的附加参数。

此函数将图像连同指定的文件名保存在指定的位置。

Example

在这个示例中,我们使用 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")

Output

已加载的图像 −

pillow image

保存的图像 −

saved image

Example

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

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")

Output

已加载的图像 −

loaded image

保存的图像 −

save images

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