Python 中的 Pillow 包

Manav Narula 2024年2月15日
  1. 在 Python 中使用 Pillow 包讀取和顯示影象
  2. Python 中使用 Pillow 包獲取圖片的屬性
  3. 在 Python 中使用 Pillow 包編輯和處理影象
  4. まとめ
Python 中的 Pillow 包

我們可以使用 Python 中的不同庫來讀取、處理和顯示影象。在 2011 年棄用之前,我們擁有標準影象處理庫 PIL(Python Imaging Library)包。

過了一段時間,引入了一個 Pillow 專案,它是原始 PIL 包的一個分支。該庫包括對所有新影象格式的支援,並新增了新的解碼器來處理這些新格式。

我們通過執行 pip install pillow 命令來安裝這個庫。

本教程將演示 Python 中 Pillow 庫的基礎知識。

在 Python 中使用 Pillow 包讀取和顯示影象

我們可以使用 open() 函式開啟影象並將其儲存在 PIL 類物件中。我們指定檔案的路徑並將其與 PIL.Image 物件一起使用。

使用 show() 函式,我們可以在 PIL.Image 物件中顯示影象。在此之後,影象將儲存在緩衝區中並轉換為 PNG 格式以顯示它。

請參閱下面的程式碼。

from PIL import Image

i = Image.open("image.png")
i.show()

輸出:

使用 Pillow 讀取和顯示影象

在上面的示例中,我們使用 open() 函式讀取影象並使用 show() 函式顯示它。

Python 中使用 Pillow 包獲取圖片的屬性

我們還可以使用 PIL.Image 物件獲取不同的影象屬性。

mode 屬性說明由畫素確定的載入影象的深度和型別。模式可以是 L(灰度)、P(對映到其他模式)、RGB 等。

例子:

from PIL import Image

i = Image.open("image.png")
print(i.mode)

輸出:

RGBA

我們可以使用 convert() 函式將影象轉換為不同的模式並指定其中的模式。

我們還可以分別使用 sizeformat 屬性找到影象的大小和格式。

請參閱下面的程式碼。

from PIL import Image

i = Image.open("image.png")
print(i.size, i.format)

輸出:

(640, 640) PNG

在 Python 中使用 Pillow 包編輯和處理影象

我們還可以使用 Pillow 包處理影象並對其進行編輯。它有一個名為 PIL.ImageFilter 的模組,用於儲存不同的過濾器。

我們可以使用 filter() 函式將它們應用於影象,並在其中指定過濾器。

例子:

from PIL import Image, ImageFilter

i = Image.open("image.png")
edited = i.filter(ImageFilter.BLUR)
edited.show()

輸出:

用 Pillow 對影象應用過濾器

在上面的示例中,我們使用 filter() 函式中的 ImageFilter.BLUR 對影象進行模糊處理。

此外,這個包的 crop() 函式可以將影象裁剪到給定的尺寸。rotate() 函式可以將影象旋轉給定的角度。

請參閱下面的程式碼。

from PIL import Image, ImageFilter

i = Image.open("image.png")
t = i.crop((100, 100, 350, 350))
edited = t.rotate(90)
edited.show()

輸出:

使用 Pillow 裁剪和旋轉影象

我們提到了裁剪影象的尺寸並將其旋轉給定角度。

此外,save() 函式可以儲存編輯後的影象。

我們在函式中提到了影象的路徑和檔名。我們還應該在檔名中指定影象的格式。

例子:

from PIL import Image, ImageFilter

i = Image.open("image.png")
t = i.crop((100, 100, 350, 350))
edited = t.rotate(90)
edited.save("edited.png")

まとめ

最後,我們討論了 Pillow 包的不同用途、它的歷史、它是如何在 PIL 包之後出現的,以及在讀取和處理影象中的一些主要用途。

作者: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

相關文章 - Python Package