首頁 > web前端 > js教程 > 主體

使用畫布調整影像大小時如何克服鋸齒狀邊緣和模糊結果?

DDD
發布: 2024-10-22 20:40:03
原創
572 人瀏覽過

How to Overcome Jagged Edges and Blurry Results When Resizing Images with Canvas?

在JavaScript 中使用Canvas 調整影像大小時解決平滑問題

在JavaScript 中使用Canvas 調整影像大小有時會導致明顯的鋸齒齒狀邊緣或模糊。為了實現平滑的調整大小,可以採用一種稱為向下步進的技術。

在大多數瀏覽器中,預設使用線性內插來調整大小。雙三次插值可產生更平滑的結果,涉及使用更大的像素鄰域。但是,瀏覽器通常不會直接實作雙三次插值。

向下步進方法涉及重複調整影像大小,每次使用較小的比例因子。這模仿了雙三次插值的行為,同時仍在底層瀏覽器中使用線性內插。

以下程式碼片段示範如何實現向下步進:

var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var img = new Image();

img.onload = function () {

    // set size proportional to image
    canvas.height = canvas.width * (img.height / img.width);

    // step 1 - resize to 50%
    var oc = document.createElement('canvas'),
        octx = oc.getContext('2d');

    oc.width = img.width * 0.5;
    oc.height = img.height * 0.5;
    octx.drawImage(img, 0, 0, oc.width, oc.height);

    // step 2
    octx.drawImage(oc, 0, 0, oc.width * 0.5, oc.height * 0.5);

    // step 3, resize to final size
    ctx.drawImage(oc, 0, 0, oc.width * 0.5, oc.height * 0.5,
    0, 0, canvas.width, canvas.height);
}
img.src = "//i.imgur.com/SHo6Fub.jpg";
登入後複製

此程式碼建立一個臨時畫布,oc,並迭代調整圖像大小,最終將其繪製到最終畫布上。每個調整大小步驟都使用線性插值,但透過將它們組合起來,整體效果近似於雙三次插值。

imageSmoothingQuality 屬性還可以用於控制 Chrome 中的平滑質量,提供更直接的實現平滑的方法,但尚未在所有瀏覽器中支援。

以上是使用畫布調整影像大小時如何克服鋸齒狀邊緣和模糊結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!