Introduction du format de compression d'image QOI

Un nouveau format de compression d'image léger et sans perte a été introduit - QOI (Quite OK Image), qui vous permet de compresser très rapidement des images dans les espaces colorimétriques RVB et RGBA. Lorsque l'on compare les performances avec le format PNG, l'implémentation de référence monothread du format QOI en langage C, qui n'utilise pas d'instructions SIMD ni d'optimisations d'assemblage, est 20 à 50 fois plus rapide en termes de vitesse d'encodage que les bibliothèques libpng et stb_image, et 3 -4 fois plus rapide en vitesse de décodage. En termes d'efficacité de compression, QOI est proche de libpng dans la plupart des tests (dans certains tests, il est légèrement en avance et dans d'autres, il est inférieur), mais en général, il est sensiblement en avance sur stb_image (gain jusqu'à 20 %).

L'implémentation de référence de QOI en C ne comporte que 300 lignes de code. Le code source est distribué sous licence MIT. De plus, des passionnés ont préparé des implémentations d'encodeurs et de décodeurs dans les langages Go, Zig et Rust. Le projet est développé par Dominic Szablewski, un développeur de jeux expérimenté dans la création d'une bibliothèque pour décoder la vidéo MPEG1. En utilisant le format QOI, l'auteur a voulu montrer qu'il est possible de créer une alternative efficace et simple aux formats modernes d'encodage d'images trop compliqués.

Les performances QOI sont indépendantes de la résolution et de la nature de l'image codée (O(n)). Le codage et le décodage sont effectués en un seul passage - chaque pixel n'est traité qu'une seule fois et peut être codé de l'une des 4 manières suivantes, sélectionnées en fonction des valeurs des pixels précédents. Si le pixel suivant coïncide avec le précédent, alors le compteur de répétitions ne fait qu'augmenter. Si le pixel correspond à l'une des valeurs du tampon des 64 pixels passés, la valeur est remplacée par un décalage de 6 bits par rapport au pixel passé. Si la couleur du pixel précédent est légèrement différente, la différence est indiquée sous une forme courte (codage court des différences de composantes de couleur qui s'inscrivent dans 2,4, 5 et XNUMX bits). Si l'optimisation n'est pas applicable, la valeur rgba complète est fournie.

Source: opennet.ru

Ajouter un commentaire