Maison > interface Web > js tutoriel > le corps du texte

Comment obtenir des images redimensionnées fluides avec HTML Canvas ?

Susan Sarandon
Libérer: 2024-10-22 22:04:03
original
437 Les gens l'ont consulté

How to Achieve Smooth Resized Images with HTML Canvas?

Lisser les images avec Canvas

Redimensionner les images avec le canevas HTML est une tâche courante, mais obtenir une fluidité peut être un défi. Bien que les logiciels de retouche d'images comme Photoshop proposent divers algorithmes d'interpolation tels que bicubique et bilinéaire, il n'est pas clair si Canvas prend en charge ces options.

<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>
Copier après la connexion

L'extrait de code ci-dessus redimensionne une image à l'aide de Canvas, mais l'image redimensionnée manque de fluidité.

Pour résoudre ce problème, le concept de réduction peut être utilisé. Les navigateurs utilisent généralement l'interpolation linéaire pour le redimensionnement, ce qui peut entraîner un alias. En divisant le processus de réduction d'échelle en plusieurs étapes, on peut obtenir un résultat plus proche de l'interpolation bi-cubique.

Considérez le code modifié suivant :

<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>
Copier après la connexion

Ce code effectue plusieurs étapes de redimensionnement successivement, en réduisant progressivement la taille de l'image et en appliquant une interpolation. Le résultat est une image avec des bords plus lisses et une qualité visuelle améliorée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!