← 所有文章

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

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 進行圖片縮放時,可以透過 imageSmoothingEnabled 和 imageSmoothingQuality 屬性來控制插值品質:

進階: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