Skip to content

[Python] 使用 PIL 套件將圖片背景轉成透明圖層

Last Updated on 2021-10-13 by Clay

在進行圖片處理的過程中,很多時候我們會希望將圖片的背景轉為透明,使用 Python 當中的 PIL 模組可以輕易地辦到這一點,也可以客製化自己想要轉為透明背景的顏色,甚至可以指定區間來進行透明的轉換。

這是一個還滿常見、簡單的技巧,所以便隨手紀錄下來。

若是對 Python 當中 PIL 的相關使用方法有興趣,可以參考他們官方的教學: https://pillow.readthedocs.io/en/3.0.x/handbook/tutorial.html


將圖片的背景轉為透明

首先,假設我有一張這樣的圖片:

這是一張 JPG 格式的圖片,我們可以看到,大部分的背景都是白色。那麼以下,我們使用 PIL 這個模組來進行轉換的處理。

如果是第一次使用 PIL,要使用以下指令安裝:

pip3 install pillow


安裝結束之後,我們便來看一段範例:

# -*- coding: utf-8 -*-
from PIL import Image

image = Image.open('input.jpg')
print(image)
print(image.mode)


Output:

<PIL.Image.Image image mode=RGBA size=626x417 at 0x179240973C8>
RGB


我們可以看到這是個 PIL.Image.Image 資料型態的檔案,而且這個檔案的模式為 "RGB"。想要將圖片背景設為透明,我們首先需要將 "RGB" 轉為 "RGBA"。

image = image.convert('RGBA')

print(image.mode)


Output:

RGBA


然後我們先拿出這張圖片的像素值,並判斷像素是否為白色 (255, 255, 255):

# Transparency
newImage = []
for item in image.getdata():
    if item[:3] == (255, 255, 255):
        newImage.append((255, 255, 255, 0))
    else:
        newImage.append(item)

image.putdata(newImage)


可以看到,我將所有像素值為 (255, 255, 255) 的點通通取代成透明了。當然,這裡可以自己設定要轉換什麼顏色。

image.save('output.png')


最後,記得將圖片儲存為 PNG 格式, JPG 格式貌似是不支援透明背景的。

這張的背景已經是透明的了,當然,如果背景都是一片白色的話其實看不出明顯差異,哈哈哈。


完整程式碼

# -*- coding: utf-8 -*-
from PIL import Image

image = Image.open('input.jpg')
image = image.convert('RGBA')
print(image.mode)


# Transparency
newImage = []
for item in image.getdata():
    if item[:3] == (255, 255, 255):
        newImage.append((255, 255, 255, 0))
    else:
        newImage.append(item)

image.putdata(newImage)


image.save('output.png')
print(image.mode, image.size)




References


Read More

Tags:

Leave a Reply