圓形裁切,是把一張矩形圖片,變成一張圓形圖片的過程,做法是讓一個指定圓形以外的每一個像素,完全變成透明。結果會是一個 PNG 檔,而不是 JPG,因為只有 PNG 才能在曲線周圍儲存逐像素的透明度。這個圓形,通常被定義成內接在來源矩形裡、置中的最大正方形,這樣能讓主體保持對稱,也不必去猜要從哪裡「裁切」。舉例來說,一張 1200x800 的橫式照片,會用從 x=200 到 x=1000 的來源區域,產生一張 800x800 的透明 PNG;同樣的規則套用在一張 800x1200 的直式照片上,則會用從 y=200 到 y=1000 置中的垂直區域,產生一張 800x800 的 PNG。一張正方形的來源圖片,會保持它原本的尺寸。因為來源比較短的那一邊,會同時變成輸出結果的寬與高,所以圓形裁切絕不會悄悄調整圖片大小,它只會遮罩圖片。這種可預測、以幾何為優先的行為,正是Circle Crop tool直接在瀏覽器分頁裡執行、不上傳任何東西的做法。

circle crop explained
圓形裁切解說

「圓形裁切」實際上代表什麼

在日常用語裡,「圓形裁切」通常代表「把這張矩形照片變成一個圓形大頭貼」。但在幕後,這個操作更加具體:這個工具不會彎曲或扭曲圖片,也不會嘗試在裡面找出一張臉。它單純選出一個幾何區域,把那個區域畫到一個透明畫布上,再把這個畫布裁成一個圓形。圓形裡面的一切,都保留原始像素;圓形外面的一切,都變成透明。使用者看到的結果,是一張圓形圖片,能乾淨地疊在任何背景上,不論是淺色、深色,還是有圖案的,周圍都不會帶著一個方形邊框。

這一點很重要,因為這個詞常被鬆散地使用。有些應用程式,把「圓形裁切」用來指柔化暈影、橢圓形裁切,或帶圓角的方形裁切。真正的圓形裁切,是嚴格的那種版本:一個完美的幾何圓形、硬邊界,外部透明。當你理解這個操作是幾何性的、而不是詮釋性的,其餘的行為——包括尺寸、輸出格式,以及不調整大小的保證——就會順理成章。

完美圓形背後的幾何

要產生一個完美的圓形,瀏覽器會先選出一個正方形。一個圓形,只有在邊長相等的正方形裡才能剛好貼合,所以這個工具,會取內接在來源矩形裡、置中的最大正方形。來源比較短的那一邊,就會變成那個正方形的邊長。對橫式照片來說,這個正方形位在畫面正中間;對直式照片來說,它會橫跨整個寬度,並在垂直方向置中;對已經是正方形的照片來說,則完全不會裁掉任何東西。

接著,這個正方形會被畫到一個同樣大小的輸出畫布上,而在繪製之前,會先套用一個圓形的裁切路徑。用 Canvas API 的說法,這是一個兩步驟的操作:呼叫CanvasRenderingContext2D.clip,把繪製範圍限制在一個圓形區域內,而CanvasRenderingContext2D.drawImage,則把選定的來源矩形,繪製到對應的目標矩形裡。圓形外面的像素永遠不會被畫出來,所以它們會保持透明。這個結果在數學上是可預測的:每次都是同樣的中心、同樣的半徑、同樣的輸出尺寸,這也是為什麼橫式、直式、正方形,與奇數差異輸入的黃金測試,全部都依賴同一套共用的裁切方案。

為什麼輸出結果永遠是 PNG

JPEG 沒辦法儲存透明度。每一個 JPEG 像素,都是不透明的 RGB,沒有 alpha 通道,所以一個 JPEG 版的「圓形裁切」,要不就得用單一顏色填滿四個角落(這在任何其他背景上看起來都不對),要不就得保留一個方形邊框(這樣就失去了裁切的意義)。相對地,PNG 儲存的是真正的 alpha 通道,所以圓形外面的每一個像素,都可以保有一個 0 值,在任何背景上都維持不可見。代價是檔案大小:PNG 使用無損壓縮,所以一張透明圓形的 PNG,即使涵蓋的可視面積比較小,通常還是會比原始的 JPEG 大。這是正常現象,不是一個錯誤,也正是為什麼每一次圓形裁切匯出,都使用 image/png。

值得知道的是,這個輸出結果不會保留哪些東西。從重新建構的畫布匯出 PNG,會保留像素,但會捨棄 EXIF 中繼資料、相機方向標籤、內嵌的色彩設定檔、動畫影格,以及任何私有的文字欄位。可見的圖片不會改變,但如果你後續需要依賴中繼資料,就得另外處理它。

如何在瀏覽器裡對圖片做圓形裁切

  1. 在你的瀏覽器分頁裡打開 Circle Crop。
  2. 從你的電腦裡選擇一個 JPG、PNG,或 WebP 檔案。這個工具接受最多 25 MiB(26,214,400 位元組)的壓縮檔案,解碼之後,則接受最多 40 百萬畫素、每一邊上限為 20,000 像素的圖片。
  3. 確認顯示出來的來源尺寸,這樣你就能精確知道這個工具會用哪一個正方形,以及最後輸出的尺寸會是多少。
  4. 選取 Create circle crop。這個工具會取原始像素大小下、置中的最大正方形,並在一個透明畫布上,把它裁成一個圓形。
  5. 分別對照淺色與深色背景,檢視這張透明 PNG 的預覽,確認沒有任何重要的細節碰到那條曲線。
  6. 下載這張 PNG。下載下來的檔案,來自原始尺寸的輸出畫布,而不是頁面上比較小的預覽圖。

輸出尺寸與不調整大小規則

圓形裁切最重要的一條規則,就是輸出尺寸,等於來源比較短的那一邊。這個工具不會重新取樣、不會放大,也不會縮小。它只會做遮罩。下面的表格,顯示了這個工具明確支援的三種來源形狀,分別會得到什麼結果。

來源形狀來源範例輸出 PNG 尺寸置中的來源區域
橫式1200 x 800800 x 800x = 200 to 1000
直式800 x 1200800 x 800y = 200 to 1000
正方形1000 x 10001000 x 1000整張圖片

你可以用簡單的算術,在任何一張圖片上驗證同一條規則。對於寬度 W 與高度 H,置中正方形的邊長是 min(W, H)。輸出畫布,就是這個值乘以這個值。圓形的中心在 (min(W, H) / 2, min(W, H) / 2),半徑是 min(W, H) / 2。這一條公式,就是這個操作背後全部的數學,而渲染器,會在任何像素被畫出來之前,先套用它。

什麼時候置中正方形是錯誤的選擇

因為這條規則是自動的,所以有些輸入,置中裁切會錯過主體。如果一張臉,在一張較高的直式照片裡,靠近上緣,置中的垂直區域,可能會裁到額頭。如果一張較寬的商品照片,主體位在最左邊或最右邊,一個置中的正方形,就會裁掉它的一半。這裡沒有定位控制項、沒有縮放滑桿,也沒有自動主體偵測。這個工具刻意保持簡單,好讓輸出結果容易預測與驗證。

解決方法,是先處理好來源圖片。如果你需要一個自訂的矩形區域,就在Image Cropper裡打開原始圖片;如果你需要一個特定的像素尺寸,就在Image Resizer裡打開;如果來源是側躺的,就在Image Rotator裡打開。一旦主體置中,而且不需要的邊緣都去掉了,再執行圓形裁切,置中正方形這條規則,就會做出你想要的結果。

也要保留原始檔案。瀏覽器的反鋸齒處理,可能會在曲線正上方,留下一條薄薄的、部分透明的像素帶,在正常尺寸下看起來很柔和,但在某些背景上,可能會顯現出一圈淡淡的光暈。在發布之前,對照淺色與深色兩種表面檢視結果,只需要幾秒鐘,卻能避免之後公開修補的麻煩。

圓形裁切周邊相關的工具

圓形裁切,很少是你唯一需要的編輯。要把一個圓形大頭貼,放到一個純色背景上,Add Background to PNG工具,能用一個精確的實色,取代透明區域,同時保持原始像素尺寸不變。要在視覺上柔化這條曲線,Add Shadow to Image工具,能在圓形周圍,加上一個受控制的陰影,做出漂浮的效果。要在不失去透明度的情況下縮小檔案大小,Image Compressor,能在你的瀏覽器裡,在本機重新編碼 PNG。想要一個比較柔和、非圓形的替代方案,Round Image Corners工具,提供的是一個可調整的圓角半徑,而不是一個完美的圓形。這些步驟,每一個都在同一套純瀏覽器的工作流程裡,所以在各次編輯之間,檔案永遠不需要離開你的機器。

如果你還在比較選項,圓形裁切入門:簡單的第一份指南 有詳細說明。

如果你還在比較選項,如何在 macOS 預覽程式(或你的瀏覽器)裡裁切圖片 有詳細說明。