如何使用 Python 和 PIL 壓縮影像?


在當今的數字時代,影像已成為我們生活中不可或缺的一部分。它們在各種平臺(從社交媒體到網站)的溝通和表達中發揮著重要作用。但是,高質量的影像會佔用大量的儲存空間,這會導致網站載入時間變慢以及上傳時間變長。在這種情況下,影像壓縮就變得適用。透過減小影像的大小,您可以確保更快的載入時間、更低的頻寬使用率以及更多的儲存空間。

在本文中,我們將探討使用 Python 和 PIL 壓縮影像的過程。PIL,也稱為 Python 影像庫。它是 Python 中一個非常有用且重要的庫,它能夠開啟、操作和儲存各種影像檔案格式。透過掌握該庫的功能,我們可以輕鬆壓縮影像並獲得更快的載入時間和更少的儲存空間帶來的好處。

在我們深入研究程式碼之前,讓我們快速瞭解一下不同型別的影像壓縮。

影像壓縮型別

主要有兩種型別的影像壓縮:有失真壓縮和無失真壓縮。

有失真壓縮:有失真壓縮是一種在壓縮過程中會丟失某些資料的壓縮型別。這意味著當您解壓縮影像時,它將與原始影像不完全相同。但是,差異程度通常對人眼來說並不明顯。有失真壓縮的示例包括 JPEG 和 GIF。

無失真壓縮:無失真壓縮是一種在壓縮過程中不會丟失任何資料的壓縮型別。這意味著當您解壓縮影像時,它將與原始影像完全相同。無失真壓縮的示例包括 PNG 和 TIFF。

現在我們已經瞭解了不同型別的影像壓縮,讓我們繼續學習程式碼。

如何使用 Python 和 PIL 壓縮影像

步驟 1:安裝 PIL

第一步是安裝 PIL 庫。為此,您可以使用 pip。開啟終端或命令提示符並輸入以下命令

pip install Pillow

成功訊息

Collecting Pillow
  Downloading Pillow-8.4.0-cp39-cp39-win_amd64.whl (3.2 MB)
     |████████████████████████████████| 3.2 MB 2.1 MB/s
Installing collected packages: Pillow
Successfully installed Pillow-8.4.0

步驟 2:匯入所需的庫

安裝 PIL 後,您需要將所需的庫匯入到 Python 程式中。為此,請在 Python 檔案的開頭新增以下程式碼行

from PIL import Image
import os

步驟 3:載入影像

現在,在匯入所需的庫後,讓我們載入要壓縮的影像。為此,我們可以使用 PIL 庫中的 Image.open() 方法。

image = Image.open('image.jpg')

此程式碼開啟名為“image.jpg”的影像並將其分配給變數“image”。

步驟 4:調整影像大小

載入影像後,我們需要調整其大小以減小檔案大小。為此,我們可以使用 Image 模組中的 resize() 方法。

width, height = image.size
new_size = (width//2, height//2)
resized_image = image.resize(new_size)

此程式碼將影像大小調整為原始大小的一半。您可以根據需要更改影像大小。

步驟 5:儲存壓縮後的影像

調整影像大小後,我們需要儲存壓縮後的影像。為此,我們可以使用 Image 模組中的 save() 方法。

resized_image.save('compressed_image.jpg', optimize=True, quality=50)

壓縮影像後,我們需要將其另存為新檔案。此程式碼將壓縮後的影像儲存為名為“compressed_image.jpg”的檔案。我們可以使用“optimize”引數確保影像針對網路使用進行了最佳化。此外,我們可以根據需要使用“quality”引數調整影像質量。

步驟 6:驗證壓縮後的影像

最後,我們需要驗證壓縮後的影像是否已正確儲存。為此,我們可以比較原始影像和壓縮後的影像的檔案大小。

original_size = os.path.getsize('image.jpg')
compressed_size = os.path.getsize('compressed_image.jpg')

print("Original Size: ", original_size)
print("Compressed Size: ", compressed_size)

此程式碼將列印原始影像和壓縮後的影像的檔案大小。您可以驗證壓縮後的影像是否小於原始影像。

以下是完整的實現程式碼

示例

from PIL import Image
import os

image = Image.open('image.jpg')

width, height = image.size
new_size = (width//2, height//2)
resized_image = image.resize(new_size)

resized_image.save('compressed_image.jpg', optimize=True, quality=50)

original_size = os.path.getsize('image.jpg')
compressed_size = os.path.getsize('compressed_image.jpg')

print("Original Size: ", original_size)
print("Compressed Size: ", compressed_size)

輸出

Original Size:  1234567
Compressed Size:  543210

請注意,實際檔案大小將取決於用於程式碼的輸入影像。這只是一個示例。

結論

總之,我們討論了有失真壓縮和無失真壓縮之間的區別,以及後者如何在佔用更多空間的同時更好地保持影像質量。然後,我們逐步介紹瞭如何在 Python 中使用 PIL 壓縮影像。我們學習瞭如何調整影像大小並將其儲存為壓縮格式,以及一些最佳實踐以確保獲得最佳結果。

透過遵循本文中概述的步驟,您可以輕鬆壓縮影像並將其最佳化以供網路使用。您可以調整壓縮影像的質量和大小,以在影像質量和檔案大小之間取得正確的平衡。無論您是網站開發人員還是業餘攝影師,掌握影像壓縮都是一項寶貴的技能,可以增強您的數字形象。

更新於: 2023年7月20日

12K+ 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告