香港中小企做網店或者經營 Facebook、Instagram,成日都要處理一大堆產品相:網站要求圖片唔可以太大,否則載入慢、仲食埋客人嘅流動數據;社交媒體又有指定尺寸;仲要加個水印保護自己啲原圖。逐張人手縮細、壓縮、加水印,十張八張都仲頂得順,但一百張呢?
呢篇教學用 Python 加一個叫 Pillow 嘅圖片處理庫,十幾行 code 就自動搞掂成個資料夾嘅相。就算你未寫過 code,跟住做都識。
第一步:安裝 Pillow
先確認你已經裝咗 Python(未裝可以睇返我哋之前嘅入門教學)。跟住開「命令提示字元」,打以下指令安裝 Pillow:
pip install Pillow
見到 Successfully installed Pillow 就代表得咗。
第二步:個程式會幫你做乜?
呢個程式一次過幫你做三樣嘢:
- 改尺寸 —— 闊度超過 1200 像素就自動縮細,唔會夾硬放大,保持清晰
- 壓縮 —— 統一轉做 JPEG 並調低質素,令檔案細一大截,網站自然載入得快
- 加水印 —— 喺右下角加一行字,防止俾人隨便盜圖
第三步:寫程式
開一個新檔案 resize.py(記事本都得),貼入以下 code:
from PIL import Image, ImageDraw, ImageFont
from pathlib import Path
SRC = Path("photos") # 原相放呢度
OUT = Path("resized") # 輸出資料夾
OUT.mkdir(exist_ok=True)
MAX_W = 1200 # 闊度上限(像素)
QUALITY = 80 # JPEG 質素(愈細 = 檔案愈細)
WATERMARK = "Sky World Biz"
n = 0
for p in SRC.glob("*"):
if p.suffix.lower() not in (".jpg", ".jpeg", ".png"):
continue
img = Image.open(p).convert("RGB")
# 1) 改尺寸:只縮細,唔放大
w, h = img.size
if w > MAX_W:
img = img.resize((MAX_W, int(h * MAX_W / w)))
# 2) 右下角加水印
draw = ImageDraw.Draw(img)
font = ImageFont.load_default()
bbox = draw.textbbox((0, 0), WATERMARK, font=font)
tw, th = bbox[2] - bbox[0], bbox[3] - bbox[1]
draw.text((img.width - tw - 10, img.height - th - 10),
WATERMARK, fill=(255, 255, 255), font=font)
# 3) 壓縮並儲存
img.save(OUT / (p.stem + ".jpg"), "JPEG",
quality=QUALITY, optimize=True)
n += 1
print("搞掂!共處理", n, "張相")
逐行解釋
- from PIL import Image, ImageDraw, ImageFont —— 載入 Pillow 三個核心工具:開圖、畫圖、字體。
- SRC = Path("photos") —— 指定原相資料夾,將你啲相放喺呢度。
- MAX_W = 1200 —— 闊度上限。1200 像素已經夠網頁同社交媒體用。
- QUALITY = 80 —— JPEG 質素,由 1(最細)到 100(最清)。80 通常肉眼分唔出,但檔案細好多。
- SRC.glob("*") —— 列出資料夾入面所有檔案,再靠 p.suffix 判斷係咪圖片。
- img.resize((MAX_W, int(h * MAX_W / w))) —— 按比例縮細,保持長闊比唔會變形。
- draw.text(...) —— 喺右下角畫水印,-10 係預留 10 像素邊位。
- img.save(..., quality=80, optimize=True) —— 壓縮儲存,optimize 會再縮細少少檔案。
第四步:執行
喺命令提示字元度,切換去 resize.py 所在位置,打:
python resize.py
搞掂!resized 資料夾入面就係處理好嘅相,原本啲相原封不動。
壓縮質素點揀?
QUALITY 數字係「質素 vs 檔案大小」嘅平衡。一般用途:
- 90–100 —— 幾乎無損,適合要放大印刷嘅相
- 75–85 —— 網店產品相、社交媒體,肉眼睇唔出分別,但檔案細 60–70%
- 50–70 —— 只係做縮圖或者預覽,唔建議做正式展示
總結
Python 教學:用十幾行 code 就將「逐張縮細、壓縮、加水印」呢啲重複功夫交俾電腦做,慳返啲時間專心做生意。用同樣思路,你可以再改做自動加邊框、自動轉格式,甚至同之前嘅排程教學結合,令佢日日自動跑。