做網店、做市場推廣嘅朋友,一定試過呢個情景:影咗或者收到幾百張產品相,要逐張改做同一個尺寸、壓縮到唔超過某個容量、再加個公司水印,最後轉做網頁用嘅格式。用修圖軟件一張一張開、一張一張改、一張一張另存,做十張都仲忍得住,做到第一百張就想收工。
其實呢類「同一套動作、重複幾百次」嘅工序,正正就係電腦最擅長嘅事。用 Python 嘅圖片處理套件 Pillow,寫大約二十行嘅程式,就可以將成個資料夾嘅圖一次過處理好,你去沖杯咖啡返嚟已經搞掂。
Pillow 係咩?點解要學?
Pillow 係 Python 最常用嘅圖片處理套件(佢個舊名叫 PIL)。佢可以開圖、改尺寸、裁剪、旋轉、調光暗、加文字水印、轉格式、壓縮——基本上修圖軟件日常會用到嘅功能佢都有,而且係免費、開源、完全用程式控制。正因為係用程式控制,所以先可以「批量」:處理一百張圖同時處理一張圖,工序完全一樣,只係多咗一個迴圈。
第一步:安裝 Pillow
打開「命令提示字元」(Windows 搜 cmd),打以下一行就可以:
裝完之後,你嘅 Python 就已經識得處理圖片,唔使買任何軟件。
第二步:先識三招基本功
所有批次處理,其實都係由三個動作砌出嚟:開圖、改圖、儲存。
就係咁簡單。resize() 將圖片改成指定尺寸,save() 入面嘅 quality=80 就係壓縮質素(1 至 100,數字越細,檔案越細)。
第三步:批次處理成個資料夾
單張處理識咗,加個迴圈就變成批量。假設你有個叫 photos 嘅資料夾,想將入面所有圖片統一改成 800×800、壓縮、再存去一個叫 output 嘅新資料夾:
逐行解釋
- glob.glob("photos/*") —— 一次過拎晒資料夾入面所有檔案,唔使自己數。
- path.lower().endswith(IMG_EXTS) —— 只揀圖片,遇到 Excel、PDF 或者隱藏檔就自動跳過,唔會撞板。
- convert("RGB") —— 將圖片轉做標準 RGB 色彩;有啲 PNG 帶透明通道,唔轉嘅話儲存做 JPG 會直接報錯。
- resize(..., Image.LANCZOS) —— 指定用最高質素嘅縮圖演算法,縮完唔會起格。
- try / except —— 就算有一兩張圖壞咗,程式都會繼續做落去,唔會中途死機白做。
- optimize=True —— 叫 Pillow 額外壓一壓,通常再細幾個百分比,免費嘅。
加公司水印
加浮水印嘅原理,其實係「將一張細細嘅 logo 貼上大圖上面」。先準備一張透明底嘅 logo(PNG 格式),然後:
留意 paste() 嘅第三個參數:一定要傳入 logo 本身做遮罩,透明嘅部分先會透返底圖出嚟,否則會出現一個白色方框,非常礙眼。
轉 WebP:網站載入快幾成
如果你係做網站,將相片轉做 WebP 格式,通常可以比 JPG 細三成,但肉眼睇落差唔多,網頁自然載入快啲。改法好簡單,淨係改儲存嘅檔名同格式:
Pillow 會按檔名自動轉格式,唔使額外安裝任何嘢,亦唔使逐張上網轉檔。
五個實戰貼士
- 先備份原圖 —— 程式永遠輸出到新資料夾,唔好直接覆蓋原檔;試錯空間大好多,出事都唔怕。
- 記住「長邊」概念 —— 產品相闊高比例唔同,硬改做正方形會拉長變形。想保持比例,就只縮長邊,或者先裁成正方形。
- 手機相會上下顛倒 —— 手機相片帶有旋轉資訊(EXIF),加一行 ImageOps.exif_transpose(img) 就可以擺正,唔會出現打橫嘅相。
- 質素由 80 試起 —— JPG quality 80 通常肉眼睇唔出同 100 有分別,但檔案細一半;低過 70 就開始起「格仔」。所以唔好一開始就開到 100。
- 快到你唔信 —— Pillow 處理一張 800px 圖只需十幾毫秒,一千張都係講緊幾十秒,絕對快過人手逐張做。
總結
Python 教學:本文由最簡單嘅開圖、改尺寸、儲存三招開始,一路示範到批次處理成個資料夾、加公司水印,同埋轉 WebP 慳位。核心心法只有一句:搵出你重複做嘅工序,交俾 Python 用迴圈一次過做晒。下次再遇到「幾百張圖要統一處理」嘅工作,唔好再逐張開修圖軟件——寫廿行 code,設好參數,跑一次,之後每個月都可以循環再用。