← 所有文章

圖片縮放演算法:雙線性、雙三次插值原理解析

2026 年 3 月 · 閱讀時間約 7 分鐘

當你放大或縮小一張圖片時,電腦需要「猜測」新像素的顏色值。這個過程稱為插值(Interpolation)。不同的插值演算法會產生截然不同的結果 — 有些保留銳利邊緣,有些則追求平滑過渡。理解這些演算法的原理,能幫助你在不同場景下做出最佳選擇。

什麼是圖片插值?

數位圖片由一個個像素組成。當我們改變圖片尺寸時,目標圖片的像素位置可能落在原始像素的「中間」。插值演算法的任務就是根據周圍已知像素的值,計算出這些新位置的顏色。

重點摘要:插值演算法的核心問題是:已知周圍像素的顏色,如何合理推算出新像素的顏色?不同演算法在「速度」與「品質」之間做出不同的取捨。

最近鄰插值(Nearest-Neighbor)

最近鄰插值是最簡單的方法:直接使用距離最近的原始像素值作為新像素的值。

特點

雙線性插值(Bilinear Interpolation)

雙線性插值考慮目標像素周圍最近的 4 個像素(2x2),根據距離進行加權平均。先在 X 方向做線性插值,再在 Y 方向做線性插值。

計算過程

  1. 找到目標像素在原圖中對應位置周圍的 4 個像素
  2. 計算目標位置與這 4 個像素的距離比例
  3. 先沿水平方向做兩次線性插值
  4. 再沿垂直方向做一次線性插值,得到最終值

特點

雙三次插值(Bicubic Interpolation)

雙三次插值考慮目標像素周圍的 16 個像素(4x4),使用三次多項式進行加權計算。這提供了更平滑的結果,同時保留更多的細節和銳利度。

特點

三種演算法比較

特性最近鄰雙線性雙三次
取樣像素數14 (2x2)16 (4x4)
計算速度最快中等較慢
放大品質像素化略模糊最平滑
邊緣保留硬邊中等銳利
適合放大像素藝術一般用途照片
適合縮小不建議可接受推薦

Canvas API 中的實作

在瀏覽器中使用 HTML5 Canvas 進行圖片縮放時,可以透過 imageSmoothingEnabledimageSmoothingQuality 屬性來控制插值品質:

進階:Lanczos 重新取樣

Lanczos 重新取樣是一種更高品質的演算法,使用 sinc 函數作為基底,取樣範圍更大(通常為 6x6 或 8x8 像素)。它在縮小圖片時特別出色,能有效避免鋸齒和摩爾紋。

許多專業影像編輯軟體(如 Photoshop、GIMP)都將 Lanczos 作為預設或推薦的縮放演算法。

立即使用圖片縮放工具 →

結語

選擇正確的插值演算法取決於你的使用場景。像素藝術用最近鄰,一般用途選雙線性,專業品質用雙三次或 Lanczos。了解這些基本原理,能幫助你在縮放圖片時獲得最佳效果。

參考文獻

  1. Gonzalez, R. C. & Woods, R. E. "Digital Image Processing." Pearson, 4th Edition, 2018. Chapter 2: Digital Image Fundamentals — Interpolation.
  2. Wikipedia contributors. "Bilinear interpolation." Wikipedia, The Free Encyclopedia, 2025. https://en.wikipedia.org/wiki/Bilinear_interpolation
  3. Wikipedia contributors. "Bicubic interpolation." Wikipedia, The Free Encyclopedia, 2025. https://en.wikipedia.org/wiki/Bicubic_interpolation
  4. MDN Web Docs. "CanvasRenderingContext2D: imageSmoothingQuality property." Mozilla Developer Network, 2025. https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/imageSmoothingQuality