Maison > interface Web > tutoriel CSS > Comment étirer des images sans anticrénelage dans un navigateur ?

Comment étirer des images sans anticrénelage dans un navigateur ?

DDD
Libérer: 2024-11-02 14:40:02
original
402 Les gens l'ont consulté

How to Stretch Images Without Antialiasing in a Browser?

Étendre les images sans anticrénelage dans le navigateur

Dans le domaine du pixel art, étirer les images à des tailles plus grandes tout en préservant leurs bords nets peut être une tâche ardue. défi. Les algorithmes de mise à l'échelle introduisent souvent un anticrénelage indésirable, brouillant les lignes nettes et compromettant l'esthétique souhaitée.

Pour résoudre ce problème, plusieurs méthodes ont été explorées, notamment :

Techniques CSS

Les premières tentatives utilisant CSS, JavaScript et HTML se sont révélées inefficaces, entraînant des images floues en raison de l'anticrénelage. Cependant, une nouvelle propriété CSS est apparue comme une solution :

image-rendering: pixelated;
Copier après la connexion

Cette propriété désactive l'anticrénelage, donnant aux images une apparence nette et pixellisée. Il fonctionne bien dans les navigateurs modernes tels que Chrome, Firefox et même IE7-8.

Approche Canvas

Pour les navigateurs sans prise en charge du rendu d'image, une approche plus complexe Une approche utilisant l'API Canvas peut être utilisée. Voici un extrait de code JavaScript qui copie les pixels de l'image source et les met à l'échelle selon un facteur spécifié :

var img = new Image();
img.src = ...;
img.onload = function() {

    // Define scaling factor
    var scale = 8;

    // Create an off-screen canvas to hold the source image
    var src_canvas = document.createElement('canvas');
    src_canvas.width = this.width;
    src_canvas.height = this.height;

    // Draw the source image to the off-screen canvas
    var src_ctx = src_canvas.getContext('2d');
    src_ctx.drawImage(this, 0, 0);

    // Get pixel data from the source canvas
    var src_data = src_ctx.getImageData(0, 0, this.width, this.height).data;

    // Create an on-screen canvas to display the scaled image
    var dst_canvas = document.getElementById('canvas');
    dst_canvas.width = this.width * scale;
    dst_canvas.height = this.height * scale;
    var dst_ctx = dst_canvas.getContext('2d');

    // Copy pixels from the source canvas to the on-screen canvas while scaling
    var offset = 0;
    for (var y = 0; y < this.height; ++y) {
        for (var x = 0; x < this.width; ++x) {
            var r = src_data[offset++];
            var g = src_data[offset++];
            var b = src_data[offset++];
            var a = src_data[offset++] / 100.0;
            dst_ctx.fillStyle = 'rgba(' + [r, g, b, a].join(',') + ')';
            dst_ctx.fillRect(x * scale, y * scale, scale, scale);
        }
    }
};
Copier après la connexion

Cette méthode fournit une mise à l'échelle parfaite au pixel près et conserve les bords nets d'origine de l'image.

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal