什麼是 alpha 通道?圖片透明是怎樣實現的

alpha 通道是每個畫素的第四個數字,表示它有多透明。理解了它,就能解釋大多數透明問題,從去背周圍的白邊,到顯示黑色背景的 PNG。

更新於 2026年10月23日 · 閱讀約 4 分鐘

跳過這些步驟:一鍵去除背景。 上傳圖片

普通圖片中的每個畫素都由三個數字描述:它包含多少紅、綠、藍。這足以說明畫素是什麼顏色,卻說明不了能否透過它看到後面的東西。alpha 通道就是每個畫素的第四個數字,專門做這件事:它儲存不透明度,範圍從完全透明到完全不透明。

人們說“透明背景的 PNG”,指的是帶有 alpha 通道、且背景畫素的 alpha 為零的圖片。本指南解釋這個數字如何起作用、軟體儲存它的兩種方式、邊緣為什麼會出問題,以及如何檢查檔案裡到底有什麼。

RGBA:每個畫素四個通道

MDN 對 alpha 通道的定義很簡單:顏色由通道(紅、綠、藍)組成,要描述一種“在一定程度上可以透過它看到背景”的顏色,就要加上第四個通道。四個通道都有的圖片稱為 RGBA。

這個值有幾種寫法,含義都一樣:

表示法完全透明半透明完全不透明
8 位整數(大多數圖片檔案)0128255
16 位整數(16 位 PNG)03276865535
小數(合成運算、CSS)00.51
百分比(CSS)0%50%100%
十六進位制字尾(CSS #rrggbbaa)0080ff

PNG 規範說得很精確:alpha 值為零表示完全透明,該位深的最大值表示完全不透明,中間值則是“可以與背景影像合成”的半透明畫素。

這些中間值才是關鍵。好的去背不只是“主體不透明、背景透明”。邊緣上的畫素,尤其是頭髮、毛髮、織物、玻璃和運動模糊處的畫素,是部分透明的,正是它們讓主體放在新背景上看起來自然,而不像是用剪刀剪下來的。

透明畫素是怎樣繪製的

當應用把你的圖片疊放在其他內容上時,會把每個畫素和它後面的內容混合。W3C 的合成與混合規範給出了基本公式:

result = Cs x as + Cb x ab x (1 - as)

Cs, as = color and alpha of your image (the source)
Cb, ab = color and alpha of what is behind it (the backdrop)

在背景不透明這種常見情況下,它就變成一個加權平均。一個 alpha 為 0.3 的畫素貢獻 30% 自己的顏色,讓 70% 的背景透過來。

直通 alpha 與預乘 alpha

儲存半透明畫素的顏色有兩種方式,把它們搞混是出現深色或亮色邊緣的典型原因。

直通 alpha(也叫非關聯或非預乘 alpha)按畫素完全不透明時的樣子儲存顏色,並單獨儲存不透明度。一個半透明的純紅畫素儲存為紅 255、綠 0、藍 0、alpha 128。

預乘 alpha(也叫關聯 alpha)儲存的是已經乘以 alpha 的顏色。同一個畫素儲存為紅 128、綠 0、藍 0、alpha 128。用 PNG 規範的話說,這樣的影像“已經與黑色背景合成過了”。

檔案用哪一種,取決於格式和軟體:

  • PNG 始終使用直通 alpha。規範明確這樣規定,並指出這讓編輯器可以輕鬆修改影像的透明度。
  • 圖形管線、遊戲引擎和影片合成工具內部通常使用預乘 alpha,因為混合運算更簡單,濾波效果也更好。

當一個程式寫入預乘值、另一個程式卻按直通值讀取時,問題就來了。邊緣的顏色會過暗,形成一圈細細的黑邊。反過來則會讓邊緣過亮。如果某個工具輸出的每張去背都有一致的深色邊緣,首先要懷疑的就是預乘不匹配。

去背為什麼會有光暈

光暈是主體周圍一圈本不屬於它的可見邊緣。常見原因有四種,各有各的解決辦法。

1. 舊背景滲進了邊緣畫素

相機永遠拍不出乾淨的邊界。一縷頭髮襯著綠色樹籬,產生的畫素一部分是頭髮、一部分是樹籬。如果去背保留這些畫素的原始顏色、只是讓它們變成半透明,綠色就會一直混在裡面。放到白色背景上,主體就帶著一圈淡淡的綠光。

解決辦法是顏色淨化:為每個邊緣畫素估算真實的前景色,然後寫入這個顏色。Photoshop 在“選擇並遮住”工作區中把它叫作“淨化顏色”,開源的 rembg 庫有一個 decontaminate 選項,作用相同。它只改變邊緣顏色,從不改變蒙版的形狀。

2. 蒙版太硬

如果蒙版只有完全不透明和完全透明的畫素,邊緣就會出現鋸齒,原照片中的抗鋸齒還會在主體周圍留下一畫素寬的背景色線條。頭髮這類柔和的主體需要帶有真實中間值的柔和蒙版。

3. 透明畫素中隱藏的顏色

在直通 alpha 檔案中,alpha 為零的畫素仍然有紅、綠、藍值。你看不見它們,但縮放或模糊圖片時會混合相鄰畫素,如果這些隱藏的顏色是白色或黑色,就會滲進可見的邊緣。好的影像庫會在縮放前先預乘、縮放後再轉換回來,以避免這個問題。

4. 圖片被合併到了某種顏色上

GIF 和調色盤 PNG 通常只支援“開或關”的透明,所以工具在儲存前會把邊緣對著一種雜邊色(通常是白色)做抗鋸齒。這樣的圖片放在白色上看起來沒問題,放在任何更深的顏色上都會顯出白邊。如果你的去背要放在深色背景上,請用完整的 alpha 匯出。

蒙版、遮罩和 alpha:術語解釋

這些詞含義有重疊,用法也比較隨意。它們通常的意思如下:

  • alpha 通道: 儲存在圖片檔案內部的不透明度值,每個畫素一個。
  • 蒙版: 一張灰度圖,控制另一張圖的哪些部分可見。在 Photoshop 的圖層蒙版中,白色顯示、黑色隱藏,灰色部分可見。蒙版可以在不動原始畫素的情況下編輯,所以專業人士用蒙版而不是橡皮擦來去除背景。
  • 遮罩(matte): 電影和合成領域對同一概念的稱呼,即定義保留內容的灰度圖。“摳像”(matting)指的是為頭髮這類難處理的邊緣計算出柔和、準確的遮罩。
  • 三分圖(trimap): 一張粗略的三區域圖(確定是前景、確定是背景、不確定),一些摳像演算法以它為起點。
  • 二值蒙版或硬蒙版: 只有黑白、沒有灰色。適合方塊和 logo,不適合頭髮。
  • 去背: 最終結果,即主體的顏色加上 alpha 通道。

蒙版和 alpha 通道承載的是相同的資訊。很多工具兩種都能匯出:一種是內建 alpha 的透明 PNG,另一種是單獨的黑白蒙版圖,你可以在編輯器或影片工具中自己應用。

哪些格式能儲存 alpha

格式alpha 支援
PNG完整 alpha(8 位或 16 位),或單一透明調色盤顏色
WebP完整 alpha,無損和有損模式都支援
AVIF完整 alpha
GIF只有開或關:把一種調色盤顏色標記為透明
JPEG不支援

這些格式的完整對比,請參閱 PNG、JPEG 與 WebP 對比。

如何檢查圖片是否有透明

檔案以 .png 結尾並不能證明它是透明的。很多 PNG 是完全不透明的,網上找到的一些“透明”圖片其實是把灰白棋盤格畫進畫素裡的 JPEG。下面是可靠的檢查方法。

用肉眼

把圖片分別放在深色和淺色背景上,例如放進幻燈片或設計工具。真正的去背在兩種情況下都會在主體周圍顯示出背景色。如果仍然看到棋盤格,它就是圖片的一部分,而不是透明。

用 ImageMagick

# Does the file have an alpha channel at all?
identify -format "%A\n" photo.png

# Is it fully opaque anyway? (true means no visible transparency)
identify -format "%[opaque]\n" photo.png

%A 報告透明通道(打印出的具體字樣在 ImageMagick 6 和 7 之間有所不同),%[opaque] 會計算是否每個畫素都完全不透明。你希望看到的是有 alpha 通道,並且結果為 false。

用 Python 和 Pillow

from PIL import Image

im = Image.open("photo.png")
print(im.mode)                    # RGBA or LA means an alpha channel
print(im.has_transparency_data)   # True if the file carries any transparency info

if "A" in im.getbands():
    lo, hi = im.getchannel("A").getextrema()
    print("alpha range:", lo, hi)  # lo == 255 means nothing is transparent

極值檢查能發現一種常見情況:RGBA 檔案中的每個畫素其實都是不透明的。

平臺忽略 alpha 時

有些地方會去掉或忽略透明。Etsy 表示不支援透明 PNG,透明區域可能顯示為黑色,而 Amazon 和 Walmart 等電商平臺本來就要求主圖使用純白背景。在這些情況下,請自己把去背合併到背景色上,這樣結果由你掌控。在你自己的網站、幻燈片和設計工具中,保留 alpha。

快速獲得乾淨的 alpha 通道

如果你需要的是邊緣柔和的去背而不是硬蒙版,removebackground.dev 會生成帶完整 alpha 通道的透明 PNG 或 WebP 檔案,它的 API 還可以單獨返回灰度蒙版。

常見問題

RGBA 是什麼意思?

紅、綠、藍和 alpha。前三個描述畫素的顏色,第四個描述它的不透明度,從 0(完全透明)到最大值(8 點陣圖像中為 255)表示完全不透明。

直通 alpha 和預乘 alpha 有什麼區別?

直通 alpha 把畫素的完整顏色和不透明度分開儲存。預乘 alpha 儲存的是已經乘以不透明度的顏色,就像已經和黑色背景合成過一樣。PNG 始終使用直通 alpha;很多渲染和影片工具內部使用預乘 alpha。

為什麼我的去背有一圈白色或彩色輪廓?

通常是舊背景仍然混在邊緣畫素裡,或者圖片在儲存前對著白色做了抗鋸齒。淨化邊緣顏色、使用柔和蒙版,並用完整 alpha 而不是雜邊色匯出,可以解決大多數情況。

蒙版和 alpha 通道是一回事嗎?

它們承載相同的資訊:每個畫素一個灰度值,表示它有多可見。alpha 通道儲存在圖片檔案內部;蒙版通常是一張單獨的灰度圖,或編輯器中的圖層蒙版。

怎麼知道一張 PNG 是否真的透明?

把它分別放在深色和淺色背景上,看背景是否透出來。也可以用 ImageMagick 的 identify 配合 %[opaque],或在 Pillow 中檢查 alpha 通道的最小值;最小值為 255 表示沒有任何透明部分。

用你自己的圖片試試

新帳戶可獲得 50 個免費額度。每張圖片 1 個額度,無需訂閱,額度永不過期。

去除背景

資料來源