JavaScript: filtri personalizzati sull'elemento canvas

JavaScript: filtri personalizzati sull'elemento canvas

La manipolazione delle immagini in tempo reale è una funzionalità potente e flessibile nel mondo dello sviluppo web, specialmente quando si tratta di aggiungere filtri artistici o effetti visivi alle immagini. JavaScript, insieme al suo elemento canvas del HTML5, fornisce una piattaforma robusta per eseguire queste operazioni. In questo articolo, vedremo come applicare i filtri alle immagini utilizzando il canvas di JavaScript.

Prima di poter applicare qualsiasi filtro, dobbiamo caricare un'immagine nel canvas. Questo può essere fatto tramite JavaScript:


const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');

const img = new Image();
img.onload = function() {
    ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
}
img.src = 'path/to/your/image.jpg'; // Sostituisci con il percorso della tua immagine

Una volta che l'immagine è stata caricata nel Canvas, possiamo manipolare i suoi pixel per applicare vari filtri. Per esempio, creiamo un filtro in bianco e nero:


img.onload = function() {
    ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
    let imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
    let data = imageData.data;

    for(let i = 0; i < data.length; i += 4) {
        let grey = data[i] * 0.3 + data[i + 1] * 0.59 + data[i + 2] * 0.11;
        data[i] = grey; // rosso
        data[i + 1] = grey; // verde
        data[i + 2] = grey; // blu
    }

    ctx.putImageData(imageData, 0, 0);
}

Questo script carica l'immagine, poi scorre ogni pixel dell'immagine e calcola la luminosità media dei colori (rosso, verde, blu) per convertirli in una scala di grigi, sostituendo poi i valori originali.

Filtri avanzati

La manipolazione diretta dei pixel consente di creare filtri avanzati, come blur, contrasto, saturazione, e molto altro. Ogni filtro richiede un'algoritmo specifico per manipolare i valori dei pixel in modo appropriato.

Ad esempio, per aumentare il contrasto, si può modificare il codice del filtro in bianco e nero nel seguente modo:


for(let i = 0; i < data.length; i += 4) {
    let contrast = 20; // Regola questo valore per cambiare il livello di contrasto
    let factor = (259 * (contrast + 255)) / (255 * (259 - contrast));
    
    data[i] = factor * (data[i] - 128) + 128; // rosso
    data[i + 1] = factor * (data[i + 1] - 128) + 128; // verde
    data[i + 2] = factor * (data[i + 2] - 128) + 128; // blu
}

Conclusione

JavaScript e l'elemento canvas di HTML5 offrono un'interfaccia potente e flessibile per la manipolazione delle immagini in tempo reale. Applicare filtri alle immagini può migliorare significativamente l'aspetto visivo di un'applicazione web e creare esperienze utente coinvolgenti e personalizzate. Con una comprensione di base dei principi di manipolazione dei pixel e un po' di creatività, è possibile creare una vasta gamma di effetti visivi.

Torna su