Lo strumento sviluppato da Renzo Giust è un misuratore del flicker rate nelle immagini GIF.

Il lampeggio (flickering, flashing) può essere causato da intermittenza (acceso-spento, strobe lights), ovvero da passaggi alternati a diversi colori con significative differenze di contrasto e luminosità, nonché da movimenti rapidi di parti. Oltre che temporale, il contrasto può essere spaziale: si tratta dei pattern fotosensibili, che esulano dalla nostra trattazione.

Come funziona?

Il calcolo del flickering viene effettuato con un algoritmo che si basa sul metodo di Ridpath, ovvero il flickering è calcolato quando (DiffLuminositaPixel (colore1, colore2) > 62.5) And (DiffColorePixel(colore1, colore2) > 250).
Il metodo di Ridpath viene indicato nelle Techniques For Accessibility Evaluation And Repair Tools per le WCAG 1.0 per controllare le combinazioni fra i colori di sfondo e di primo piano allo scopo di stabilire se riescono a garantire una buona visibilità dei colori.

I coefficienti 62.5 e 250 (50% dei valori presenti nella formula per il contrasto dei colori) rappresentano un buon compromesso per ottenere risultati affidabili, sulla base di test effettuati.

Con la finalità di valutare la presenza di lampeggio, l’algoritmo viene utilizzato in questo modo:
– data un’immagine GIF, calcola la durata precisa di ogni singolo frame;
– crea una matrice di dimensioni [px larghezza x px altezza x numero frame] dove viene salvato il colore relativo ad ogni pixel. Questa matrice è l’oggetto sul quale verrà fatta l’analisi;
– analizza la GIF un pixel alla volta, ciclando su tutti i frame. Quando intercetta una variazione di colore/luminosita tale da essere potenzialmente pericolosa, ne salva la durata; la variazione viene colta anche se avviene in più frame; in funzione alla durata di ogni singolo frame è possibile quindi calcolarne precisamente la frequenza;
– dopo aver estratto tutte le variazioni, ne viene valutata la frequenza, in modo da verificare se rientra nella gamma pericolosa;
– in questo modo il sistema riesce a trovare la variazione anche su un singolo pixel, che può essere forse eccessivo (es. una variazione di un pixel su un milione di pixel può essere insignificante); il sistema quindi rapporta il numero di variazioni “problematiche” con il numero di variazioni globali. Se questo rapporto supera un valore prefissato, l’algoritmo considera l’immagine “problematica”.

Questo è a grandi linee il principio di funzionamento.

In sintesi, la regola su cui si basa l’applicazione è la seguente:
nel corso dell’animazione, il flickering è dato dai pixel che variano di colore/luminosità con intensità tale da essere tra di loro in contrasto, e con frequenza tale da rientrare nella gamma “pericolosa”.

Il tutto in realtà è ancora più complesso, in quanto il calcolo delle variazioni è legato alla durata dei singoli frame (che può essere diversa), e al numero di frame che il pixel impiega per cambiare colore/luminosità, generando un contrasto pericoloso.