UrsaKit 封面圖:JPG 轉成 PNG,並以棋盤格標出透明區域

「JPG 轉 PNG 透明背景」是最常見的圖片需求之一,而它本身就藏著一個誤解。轉檔只改變像素的儲存方式,沒辦法無中生有;而 JPEG 從來就沒有透明資訊。

目標本身並不荒謬。去背是一個真實的操作,而且最好在轉檔之後做,而不是期待轉檔順便完成。本文把這兩個步驟分開,並處理決定成品夠不夠專業的關鍵:邊緣。

01為什麼 JPG 不可能變透明

PNG 與 JPEG 儲存的東西不同。W3C 的 PNG 規範把這個格式描述為支援索引色、灰階與全彩影像,"plus an optional alpha channel",也就是可選的 alpha 通道。這個通道就是讓影像某部分透出來的逐像素不透明度。

JPEG 沒有對應的東西。它是為照片設計的,每個像素都不透明,標準的影像模型裡沒有 alpha 元件可以存。所以資訊根本不存在:一個 JPG 像素只有顏色,沒有附帶不透明度。

換容器也補不回來。解碼 JPG 時,像素就是顏色;編碼成 PNG 時,同一批顏色會以完全不透明寫出。結果是一個合法的 PNG,看起來和原圖一模一樣,因為它確實就是原圖。

轉檔保留像素,不會編輯像素。

JPG 轉 PNG 只是把同一張不透明影像改成無損儲存。要透明,得再做一個步驟,逐一決定每個像素該不該留下來。那是編輯,不是轉檔。

02轉檔工具實際上做了什麼

UrsaKit 的 JPG 轉 PNG 工具 負責的是格式這一步,而且值得刻意做。

  1. 把 JPG 拖進頁面,或點擊選擇檔案。
  2. 輸出格式維持 PNG。
  3. 按下轉換,等批次跑完。
  4. 下載 PNG。它是無損的,之後反覆編輯不會再累積一層壓縮失真。

輸出會保留每一個不透明的像素。這是正確行為,而且正是去背步驟想要的輸入:你現在拿到一份不會再因為重新編碼而劣化的影像。

有兩個細節值得知道。第一,PNG 是無損的,所以照片內容通常會變大;本機在 2026-10-04 以 Pillow 11.3.0 實測,一張 1200x800 的類照片圖從 JPEG 質素 85 的 81,069 bytes,變成 PNG 的 1,160,327 bytes,大約 14.3 倍。第二,反方向並不對稱:本站的 PNG 轉 JPG 會在編碼前把透明像素填成白色,因為 JPEG 沒有地方可以放這些資訊。

03拿到透明 PNG 的三種做法

接受「背景必須被移除,而不是被轉換」之後,剩下三種實務做法,各自適合不同的圖。

做法適用情況限制
帶容差的顏色去背背景平整,且與主體差異明顯漸變、陰影與複雜照片會失敗
主體分割主體是人物、產品或動物,背景是真實場景模型輸出仍需人工檢查邊緣
重繪成向量Logo、圖標或扁平插畫需要原始檔,或夠好的描摹結果

顏色去背是唯一不需要模型、也不需要原始檔的做法,也是與 JPEG 衝突最大的一種。在怪工具之前,先理解這個衝突。

04JPEG 對邊緣做了什麼

JPEG 是有損壓縮,而且以 8x8 像素為區塊儲存。硬邊會被抹散到這些區塊上,原本是純背景的像素,最後會與你想去掉的關鍵色略有差異。

為了量化這件事,我們做了一張 400x400 的測試圖:純白背景加上一個藍色圓形,存成 JPEG 質素 85 後重新開啟。圓形之外共有 134,555 個背景像素,其中 891 個與純白有落差,299 個落差超過 2 階,34 個超過 8 階,最大落差是 19。

background pixels sampled            134,555
deviation > 0                          891
deviation > 2                          299
deviation > 8                           34
deviation > 32                           0
max deviation                           19

這就是天真顏色去背會在主體周圍留下灰邊或色邊的原因。容差大到能清掉那 891 個像素時,也開始吃掉屬於主體的像素。把遮罩羽化一兩個像素,或去背後稍微內縮,會比硬拉高容差更能藏住接縫。

盡量從最大的原始檔開始,中途不要另存 JPEG。

每存一次 JPEG,邊緣就會多一層振鈴雜訊。如果非得來回轉檔,第一次轉出來之後就一路用 PNG 或 TIFF 當中間格式,直到最後輸出。

05能做出乾淨去背的流程

比起用哪一套編輯器,步驟順序更重要。下面這個流程用瀏覽器轉檔工具,加上任何能做顏色去背的軟件就可以完成。

  1. 先把 JPG 轉成 PNG,之後存檔就不會再累積一層 JPEG 失真。這一步用 JPG 轉 PNG。
  2. 取樣背景色時,要挑離主體很遠的像素,不要挑主體旁邊的。
  3. 容差設定到剛好能清掉你量到的雜訊。從小開始調,光暈消失就停。
  4. 把主體邊緣放大到 400% 檢查。如果被咬掉,就降低容差,改用羽化遮罩處理。
  5. 直接檢查 alpha 通道,不要只看白底預覽。棋盤格或深色底會露出白色底看不見的殘留不透明像素。
  6. 輸出成 PNG;檔案對用途來說太大時,再丟進 圖片壓縮工具。

圖標與插畫的最後一步,通常不是壓縮而是 PNG 轉 WebP。WebP 保留 alpha 通道,對扁平圖形的壓縮效率通常遠勝 PNG,代價是需要為非常老舊的軟件準備備援格式。

06透明要付出多少檔案大小

透明 PNG 仍然是 PNG,而 PNG 是無損的。這就是交換條件:精確的像素加上真正的 alpha 通道,用 bytes 來付。

實測倍率完全取決於內容。透明背景上的扁平圖標可能變小或幾乎不變,因為大面積均勻色塊很好壓縮;去背過的照片則可能膨脹一個數量級,因為每個編碼像素都要帶上 JPEG 從來不需要存的顏色與不透明度資料。

如果這張透明素材要放上網站,真正的選擇通常不是 PNG 與否,而是 PNG 還是 WebP。用 PNG 當你編輯用的母檔,用 WebP 當實際上線的版本。母檔請保持無損,這樣未來要改顏色或邊緣時,不會從一份已經壓縮過的來源重新開始。

用途格式原因
編輯母檔PNG無損、真正的 alpha,不會世代失真
網站主視覺或圖標WebP有 alpha 且壓縮效率好得多
印刷或設計交付PNG 或 TIFF無損,且 alpha 通道定義明確
電郵簽名、老舊客戶端PNG對透明的支援最廣

07常見錯誤

症狀原因修正
PNG 在主體後面看起來是白的背景從來沒有變透明做去背,光靠轉檔不會有效
去背後仍留著灰色光暈JPEG 邊緣雜訊,容差太緊稍微提高容差,再羽化遮罩
主體邊緣看起來被咬掉為了消光暈把容差拉太高降低容差,改用柔邊遮罩修邊
透明檔大得離譜照片內容維持無損另外輸出一份 WebP 交付
透明變成黑或白中途曾存成 JPEG所有中間存檔都保持無損

08資料來源

常見問題

把 JPG 轉成 PNG 就會變透明嗎?

不會。轉檔改變的是容器與壓縮方式,不是像素本身。JPEG 沒有 alpha 通道,所以轉出來的 PNG 完全不透明。透明必須靠移除背景來產生。

為什麼 JPG 轉成 PNG 之後,底下還是白的?

你看到的白色是原本的背景色,不是透明的替代顯示。這張圖片從來沒有透明像素,轉檔只是把它們原封不動地保存下來。

要怎麼最快把 JPG 的背景去掉?

如果背景是平整、單一的顏色,用帶容差值的顏色去背效果很好。如果背景是照片場景,就需要主體分割,而不是單純的顏色門檻。

去背之後邊緣為什麼毛毛的?

JPEG 是有損壓縮,硬邊會被存成一圈顏色略有差異的像素。容差調到能清掉全部雜訊時,會一起吃掉主體;容差太緊又會留下光暈。把遮罩羽化一兩個像素可以蓋掉接縫。

PNG 一定支援透明嗎?

格式本身支援選用的 alpha 通道,但某個 PNG 檔有沒有用到,取決於存檔方式:PNG-24 可以完全不透明,PNG-8 則可以帶二值或調色盤式透明。

PNG 比 JPG 大多少?

以照片內容來說差很多。本機實測一張 1200x800 的類照片圖,JPEG 質素 85 是 81,069 bytes,PNG 是 1,160,327 bytes,大約 14.3 倍。

該用 WebP 取代 PNG 嗎?

用在網頁上通常該。WebP 支援 alpha 通道,透明圖的壓縮效率遠優於 PNG,瀏覽器支援也已普及。需要無損編輯或相容老舊工具時,再保留 PNG。

返回文章列表

相關文章

相關工具