Εισήχθη η μορφή συμπίεσης εικόνας QOI

Παρουσιάστηκε μια νέα ελαφριά μορφή συμπίεσης εικόνας χωρίς απώλειες - QOI (Quite OK Image), η οποία σας επιτρέπει να συμπιέσετε πολύ γρήγορα τις εικόνες στους χρωματικούς χώρους RGB και RGBA. Κατά τη σύγκριση της απόδοσης με τη μορφή PNG, η εφαρμογή αναφοράς ενός νήματος της μορφής QOI σε C, η οποία δεν χρησιμοποιεί οδηγίες SIMD και βελτιστοποιήσεις συναρμολόγησης, είναι 20-50 φορές ταχύτερη στην ταχύτητα κωδικοποίησης από τις βιβλιοθήκες libpng και stb_image και 3- 4 φορές ταχύτερη στην ταχύτητα αποκωδικοποίησης. Όσον αφορά την αποτελεσματικότητα συμπίεσης, το QOI είναι κοντά στο libpng στις περισσότερες δοκιμές (σε ορισμένες δοκιμές είναι ελαφρώς μπροστά και σε άλλες είναι κατώτερο), αλλά γενικά είναι αισθητά μπροστά από το stb_image (κέρδος έως και 20%).

Η υλοποίηση αναφοράς του QOI στο C είναι μόνο 300 γραμμές κώδικα. Ο πηγαίος κώδικας διανέμεται υπό την άδεια MIT. Επιπλέον, οι λάτρεις έχουν ετοιμάσει υλοποιήσεις κωδικοποιητών και αποκωδικοποιητών στις γλώσσες Go, Zig και Rust. Το έργο αναπτύσσεται από τον Dominic Szablewski, έναν προγραμματιστή παιχνιδιών με εμπειρία στη δημιουργία μιας βιβλιοθήκης για την αποκωδικοποίηση βίντεο MPEG1. Χρησιμοποιώντας τη μορφή QOI, ο συγγραφέας ήθελε να δείξει ότι είναι δυνατό να δημιουργηθεί μια αποτελεσματική και απλή εναλλακτική λύση στις υπερβολικά περίπλοκες σύγχρονες μορφές κωδικοποίησης εικόνας.

Η απόδοση QOI είναι ανεξάρτητη από την ανάλυση και τη φύση της κωδικοποιημένης εικόνας (O(n)). Η κωδικοποίηση και η αποκωδικοποίηση εκτελούνται με ένα πέρασμα - κάθε pixel υποβάλλεται σε επεξεργασία μόνο μία φορά και μπορεί να κωδικοποιηθεί με έναν από τους 4 τρόπους, που επιλέγονται ανάλογα με τις τιμές των προηγούμενων pixel. Εάν το επόμενο pixel συμπίπτει με το προηγούμενο, τότε ο μετρητής επαναλήψεων αυξάνεται μόνο. Εάν το εικονοστοιχείο ταιριάζει με μία από τις τιμές στο buffer 64 περασμένων εικονοστοιχείων, τότε η τιμή αντικαθίσταται από μια μετατόπιση 6 bit στο προηγούμενο pixel. Εάν το χρώμα του προηγούμενου εικονοστοιχείου είναι ελαφρώς διαφορετικό, η διαφορά υποδεικνύεται σε σύντομη μορφή (σύντομη κωδικοποίηση των διαφορών στα στοιχεία χρώματος που χωρούν σε 2,4, 5 και XNUMX bit). Εάν η βελτιστοποίηση δεν εφαρμόζεται, παρέχεται η πλήρης τιμή rgba.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο