Introduzione del formato di compressione delle immagini QOI

È stato introdotto un nuovo formato di compressione delle immagini leggero e senza perdita di dati: QOI (Quite OK Image), che consente di comprimere molto rapidamente le immagini negli spazi colore RGB e RGBA. Confrontando le prestazioni con il formato PNG, l'implementazione di riferimento a thread singolo del formato QOI in linguaggio C, che non utilizza istruzioni SIMD e ottimizzazioni di assemblaggio, è 20-50 volte più veloce nella velocità di codifica rispetto alle librerie libpng e stb_image, e 3 -4 volte più veloce nella velocità di decodifica. In termini di efficienza di compressione, QOI è vicino a libpng nella maggior parte dei test (in alcuni test è leggermente più avanti, in altri è inferiore), ma in generale è notevolmente più avanti di stb_image (guadagno fino al 20%).

L'implementazione di riferimento del QOI in C è di sole 300 righe di codice. Il codice sorgente è distribuito sotto la licenza MIT. Inoltre, gli appassionati hanno preparato implementazioni di codificatori e decodificatori nei linguaggi Go, Zig e Rust. Il progetto è stato sviluppato da Dominic Szablewski, uno sviluppatore di giochi con esperienza nella creazione di una libreria per la decodifica di video MPEG1. Utilizzando il formato QOI, l'autore ha voluto dimostrare che è possibile creare un'alternativa efficace e semplice ai moderni formati di codifica delle immagini troppo complicati.

Le prestazioni QOI sono indipendenti dalla risoluzione e dalla natura dell'immagine codificata (O(n)). La codifica e la decodifica vengono eseguite in un unico passaggio: ogni pixel viene elaborato una sola volta e può essere codificato in 4 modi, selezionati in base ai valori dei pixel precedenti. Se il pixel successivo coincide con quello precedente, il contatore delle ripetizioni aumenta solo. Se il pixel corrisponde a uno dei valori nel buffer dei 64 pixel precedenti, il valore viene sostituito da un offset di 6 bit rispetto al pixel precedente. Se il colore del pixel precedente è leggermente diverso, la differenza viene indicata in forma breve (codifica breve delle differenze nelle componenti di colore che rientrano in 2,4, 5 e XNUMX bit). Se l'ottimizzazione non è applicabile, viene fornito il valore rgba completo.

Fonte: opennet.ru

Aggiungi un commento