上週有人發來一個資料夾:312 張商品圖,尺寸從 800×800 到 5472×3648 不等,格式有 JPG、PNG 還有幾張 HEIC。平台要求 1600×1600 的 JPG,不超過 2MB。另一個常見版本是部落格搬家:兩百多張 PNG 配圖,要統一轉成 WebP 並把寬度限制在 1600 以內。這兩件事看起來不同,做法其實是同一條流水線。
為什麼分開跑會傷畫質
最直覺的做法是:先用縮放工具把尺寸改好、下載;再用轉換工具改格式、下載;最後用壓縮工具壓體積。三步都能批次,但每一步結束時檔案都要重新編碼一次。JPG 是有損格式,每編碼一次就丟一點資訊,三次下來放大看邊緣已經有明顯的色塊和毛邊。
正確的做法是隻在最後編碼一次:圖片解碼成點陣圖後,縮放、裁切、轉格式都在記憶體裡進行,直到最後一步才按目標格式和品質寫出檔案。批次圖片處理就是按這個思路設計的——六個步驟固定順序,中間沒有任何有損環節。

場景一:三百張商品圖上架
目標:1600×1600、JPG、不超過 2MB、右下角帶店名。按步驟設:
- 尺寸:選「填滿 1600×1600」。寬幅圖和直式圖會先縮到剛好覆蓋這個框。
- 裁切比例:1:1。超出正方形的部分從中間裁掉,主體置中的商品圖不受影響。
- 浮水印:開啟,文字填店名,位置右下,大小 4%,不透明度 50%。
- 輸出:JPG,品質 85%,檔名選「重新命名為 名字-001」,字首填 SKU 或品類名。
312 張圖在一台普通筆記型電腦上大約三到四分鐘跑完,結果都在 200KB 到 600KB 之間,遠低於 2MB 的上限。幾張 HEIC 原圖直接被讀進來,不用先轉一遍。打包下載的 ZIP 裡檔名整整齊齊,上傳到後台不用再改名。
如果有些商品圖主體明顯偏在一側,置中裁切會切掉它們。這種圖挑出來,用圖片裁剪手動框一下,再單獨跑一遍流水線。一批裡這種圖通常不到一成。
場景二:部落格相簿整體換成 WebP
目標:所有配圖轉 WebP,寬度不超過 1600,截圖類保持清晰。設定比上一個場景更簡單:
- 尺寸:選「寬度 1600」,關掉「允許放大」。本來就不到 1600 寬的圖不會被動。
- 輸出:WebP,品質 80%。
- 檔名:保留原名。這樣文章裡的引用只需要把副檔名從 .png 改成 .webp。
兩百張 PNG 轉完一般能省 70% 以上的體積。要注意的只有一種圖:帶透明背景的 Logo 和圖示。WebP 支援透明,流水線會保留透明通道,不用擔心;但如果你的目標是 JPG,透明區域會被填成白色,這類圖應該留在 PNG。
轉換完之後用圖片格式轉換隨手檢查兩張在舊瀏覽器裡的相容性,心裡更有底。
「填滿」「裝進」「最長邊」怎麼選
縮放方式是最容易選錯的一項,三種常用模式各管一種場景:
- 最長邊:只關心圖不要太大,不在乎比例。網頁配圖、相簿分享用它。
- 裝進 寬×高:整張圖必須完整放進一個框裡,不裁切,可能有一邊留空。縮圖、投影片用它。
- 填滿 寬×高:框必須被鋪滿,多出的部分裁掉。電商主圖、頭像、固定比例的卡片圖用它,通常和「裁切比例」配合。
一個簡單的判斷:平台給的是「不超過多少像素」,用最長邊或裝進;平台給的是「必須是多少×多少」,用填滿。
跑之前的兩個檢查
第一,看即時預覽。流水線會把第一張圖按當前所有設定即時渲染出來,浮水印位置、裁切是否切到主體、顏色有沒有變,在這裡一眼能看出來。確認了再點「全部處理」,不要處理完三百張才發現店名打在了商品上。
第二,留一份原圖。流水線不會改動你的原檔案,但重新編碼後 EXIF 和拍攝資訊就沒了,打包下載前確認原圖還在別處存著。需要清掉定位資訊的照片這反而是好事,詳見EXIF 中介資料是什麼、為什麼要刪。
批次改尺寸和格式的核心就一句話:設定一次,整批跑完,中間不要寫入磁碟。其餘的變化,都只是三個縮放模式和兩個輸出格式之間的選擇。
