1. 確定圖片格式
支援的圖片格式
Pillow 支援多種圖片格式,包括:
- JPEG (JPG): 最受歡迎的相片格式之一。壓縮圖片時會導致品質損失,但能大幅減少檔案大小。不支援透明功能。
- PNG: 無損格式,支援透明度(alpha 通道),適合用於商標、圖標,或需要高清晰度的圖片。
- BMP: 高品質無壓縮格式,但檔案大小很大。支援透明功能。
- TIFF: 無損格式,常用於印刷領域中保存高品質圖像。
- WEBP: 現代格式,具高壓縮效率且支援透明功能,適合用於網頁圖片,能在保留良好品質的同時提供較小的檔案大小。
載入圖片以進行轉換
在轉換圖片之前,可以用 Image.open()
方法載入圖片。
from PIL import Image
# 開啟圖片檔
image = Image.open("example.jpg")
print(image.format) # 檢查圖片的原始格式
2. 將圖片轉換為其他格式
可以使用 save()
方法來儲存圖片為不同的格式,只需改變檔案名稱的副檔名或明確指定格式。
從 JPEG 轉換為 PNG
若要將圖片從 JPEG 轉換為 PNG,只需在儲存文件時指定新副檔名即可:
# 儲存圖片為 PNG 格式
image.save("example_converted.png")
此程式碼將會把圖片從 JPEG 格式轉換為 PNG 格式,並使用所指定的檔案名稱儲存。PNG 非常適合保存無損圖片,並支援透明區域。
從 PNG 轉換為 JPEG
也可以將圖片從 PNG 轉換為 JPEG,但需要注意的是,JPEG 不支援透明度。在轉換過程中,透明區域將會被填充為白色。
# 將 PNG 轉換為 JPEG(透明部分將被填充為白色背景)
image = image.convert("RGB") # 切換到 JPEG 所需的 RGB 模式
image.save("example_converted.jpg", "JPEG")
方法 convert("RGB")
被用來將圖片轉換為 RGB 模式,因為 JPEG 不支援透明區域。這是轉換為 JPEG 格式時必須的步驟。
3. 圖片品質管理
Pillow 提供 quality
和 optimize
等參數,允許控制圖片品質和檔案大小。這些參數對於 JPEG 和 PNG 特別有用。
JPEG 的最佳化與品質控制
當儲存圖片為 JPEG 格式時,參數 quality
用於調整壓縮程度。品質值越高,檔案大小越大,圖片品質也越高。quality
值的範圍為 1 到 95(默認為 75)。
# 儲存壓縮品質降低的 JPEG 圖片
image.save("example_compressed.jpg", "JPEG", quality=85)
此程式碼以品質值 85 儲存圖片,通常可保留良好品質,同時減小檔案大小。如果需要更低品質,可用於縮略圖生成,比如 quality = 50
。
PNG 的最佳化
對於 PNG,參數 optimize = True
支援無損壓縮,除去多餘數據。這在針對網路發布圖片時特別有用。
# 儲存最佳化 PNG 圖片
image.save("example_optimized.png", "PNG", optimize=True)
最佳化 PNG 有助於減小檔案大小而不損失品質,對於如標誌和圖標等每一 KB 都很關鍵的場景特別重要。
JPEG 不同壓縮級別品質比較
我們來看一下改變 quality
參數如何影響檔案大小及圖片品質。
# 儲存不同品質的 JPEG 圖片
image.save("quality_95.jpg", "JPEG", quality=95)
image.save("quality_75.jpg", "JPEG", quality=75)
image.save("quality_50.jpg", "JPEG", quality=50)
在這個範例中,我們用三種品質(95、75 和 50)儲存了同一張圖片。品質 95 的圖片幾乎與原始圖一樣,但檔案較大;而品質 50 的圖片壓縮明顯,細節可能有所損失。
4. 使用 WebP 格式
WebP 是現代格式,支援有損與無損壓縮以及透明度。因為它的高壓縮比例,WebP 被廣泛用於互聯網中。
將圖片轉換為 WebP 格式
# 轉換圖片為 WebP 格式
image.save("example.webp", "WEBP", quality=80)
此範例以品質值 80 儲存圖片為 WebP 格式。相比 JPEG 或 PNG,WebP 格式能在保留相似品質的情況下,顯著減小檔案大小。
完整轉換與最佳化範例
現在我們結合以上方法,創建一個將圖片轉換為多種格式並進行最佳化的腳本。
from PIL import Image
# 開啟圖片檔
image = Image.open("example.jpg")
# 轉換為最佳化的 PNG
image.save("converted_optimized.png", "PNG", optimize=True)
# 將圖片儲存為壓縮品質較低的 JPEG
image_rgb = image.convert("RGB") # 切換到 JPEG 所需的 RGB 模式
image_rgb.save("converted_compressed.jpg", "JPEG", quality=85)
# 儲存 WebP 格式並最佳化品質
image_rgb.save("converted_optimized.webp", "WEBP", quality=80)
在這裡:
- 我們將圖片轉換為經最佳化的 PNG,這有助於無損地減小檔案大小。
- 將圖片儲存為 JPEG 格式,品質為 85,以保證良好的品質與較小檔案大小。
- 將圖片轉換為 WebP 格式,這非常適合用於網路發布,既保留高清品質,又能大大減小檔案大小。
GO TO FULL VERSION