內容感知縮放:改畫面比例,人卻不變形
把橫圖改成直圖、16:9 改成 4:3,而畫面裡的人不會被壓扁。
要解決的是同一個麻煩:一張 16:9 的橫圖要放進 4:3 的位置。裁掉兩邊會丟內容,直接拉伸會讓人變胖、圓形變橢圓 —— 而這兩樣別人一眼就看得出來。
它是怎麼做到的。 演算法先給每個像素算一個「能量」(梯度大小:邊緣高、平坦區低),再找一條從上到下累積能量最低的像素鏈,把它整條刪掉。重複這一步,被抽走的就是天空、牆面、草地這些沒資訊的地方,而人臉、文字、建築邊緣這些高能量區域基本原樣保留。這叫接縫裁剪(seam carving)。
主要功能
主體不變形,背景替它讓位
刪的是能量最低的像素鏈,所以變窄時先犧牲的是空白背景。人臉和文字這類高梯度區域被演算法主動繞開。
也能往外撐
往回插接縫就是加寬:在最平坦的地方補像素,而不是把整張圖拉開。想把直圖鋪成橫幅時用得上。
按鈕觸發,不跟著滑桿跑
這個演算法是每刪一條接縫就要掃一遍全圖,實測 1920×1080 縮 10% 要 6 秒。所以它不像別的工具那樣拖滑桿即時出結果 —— 你先設好寬高,再按「開始處理」。
圖片不上傳
整個計算在你的瀏覽器裡完成,沒有任何一條帶圖片資料的請求。你可以打開開發者工具的網路面板自己看。
使用步驟
- 1 把圖拖進來JPG、PNG、WebP 都收,也可以 Ctrl+V 貼上。
- 2 設寬度和高度兩個滑桿都是百分比,50%–150%。只改一個也行,另一個留在 100%。
- 3 按「開始處理」處理中頁面會說一聲。圖越大、改得越多,等得越久 —— 這是演算法本身的代價。
- 4 對照左右,滿意就下載左邊原圖、右邊成品並排放。不滿意就改個數再按一次。
常見問題
- 和直接拉伸、直接裁切有什麼差別?
- 拉伸動的是每一個像素:人變胖、正圓變橢圓,誰都看得出來。裁切是把邊上的內容整塊丟掉,構圖和資訊都少了。內容感知縮放兩樣都不做 —— 它只抽掉畫面裡資訊量最低的那些像素鏈,所以主體的比例是對的,邊上的東西也還在。
- 為什麼要按一下按鈕,別的工具都是即時的?
- 因為它貴得多。別的算子是一兩遍全圖掃描(毫秒級),而接縫裁剪每刪一條接縫都要重算一遍能量圖並跑一次動態規劃。實測 600×800 縮 20% 要 0.8 秒,1920×1080 縮 10% 要 6 秒。跟著滑桿跑的話,你每鬆一次手頁面就凍幾秒 —— 而且看不出它在算。所以改成你說了算。
- 大圖的結果為什麼邊緣有點軟?
- 因為超過 900 像素的圖會先縮到最長邊 900 再計算接縫,算完再放回你要的尺寸。不這麼做的話,一張手機照片要算幾十秒。這是速度與銳度之間實打實的取捨,寫在這裡而不是讓你自己發現。900 像素以內的圖沒有這一步,是原解析度直接雕的。
- 什麼樣的圖不適合用它?
- 畫面塞得很滿的圖——比如一群人的合照、密集的文字排版、規則的建築立面。接縫裁剪要靠「低能量區域」騰地方,而這類圖裡幾乎沒有低能量區域,演算法只能去動本該保留的東西,結果會出現扭曲的線條。這類圖用普通裁切更穩。
現在就試試內容感知縮放:改畫面比例,人卻不變形
純瀏覽器執行 · 免安裝 · 免註冊 · 圖片不上傳伺服器