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

如何使用 HTML Canvas 實現平滑調整大小的圖片?

Susan Sarandon
發布: 2024-10-22 22:04:03
原創
436 人瀏覽過

How to Achieve Smooth Resized Images with HTML Canvas?

使用 Canvas 平滑圖片

使用 HTML canvas 調整圖片大小是一項常見任務,但要平滑化可能是一項挑戰。雖然 Photoshop 等影像編輯軟體提供了各種插值演算法,例如雙三次和雙線性,但尚不清楚 canvas 是否支援這些選項。

<code class="js">var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
canvas.width = 300;
canvas.height = 234;
ctx.drawImage(img, 0, 0, 300, 234);
document.body.appendChild(canvas);</code>
登入後複製

上面的程式碼片段使用 canvas 調整影像大小,但調整後的影像缺乏平滑度。

為了解決這個問題,可以採用降步的概念。瀏覽器通常使用線性插值來調整大小,這可能會導致鋸齒。透過將縮小過程分解為多個步驟,可以獲得更接近雙三次插值的結果。

考慮以下修改後的程式碼:

<code class="js">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";</code>
登入後複製

此程式碼執行多個調整大小步驟接下來,逐漸減少影像尺寸並套用內插。結果是影像邊緣更平滑,視覺品質得到改善。

以上是如何使用 HTML Canvas 實現平滑調整大小的圖片?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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