Για κάποιο λόγο, μπορείτε να τοποθετήσετε 2 εκατομμύρια εικονοστοιχεία σε μια εικόνα χωρίς να χρησιμοποιήσετε χώρο 1, 97 megabyte. Βρήκα ένα γλυκό ταπετσαρία 1080p (το οποίο έχει περίπου 2 εκατομμύρια pixels) και το κατέβασα. Ελέγχοντας τις ιδιότητες, παρατήρησα κάτι περίεργο: Χρειάστηκε μόνο 230 KB χώρου στον σκληρό δίσκο μου. Γιατί αυτό? Για κάποιον που δεν κατανοεί πλήρως τη συμπίεση εικόνας, φαίνεται σαν μαγική. Μόλις όμως γνωρίσετε το θέμα, θα καταλάβετε πώς ορισμένες εικόνες είναι μεγαλύτερες από άλλες, παρά το μέγεθος των pixel που καταλαμβάνουν στην οθόνη σας. Ο χρόνος είναι σύντομος, οπότε ας κάνουμε μια γρήγορη κατάδυση στις βασικές αρχές πίσω από τη συμπίεση της εικόνας.

Μέθοδοι, Προσεγγίσεις, Αλγόριθμοι.

Είναι αφελές να πιστεύουμε ότι υπάρχει ένας μόνο τρόπος για να συμπιέσετε μια εικόνα. Υπάρχουν διαφορετικές μέθοδοι, καθεμία από τις οποίες έχει μια μοναδική προσέγγιση σε ένα κοινό πρόβλημα και κάθε προσέγγιση χρησιμοποιείται σε διαφορετικούς αλγόριθμους για να φτάσει σε παρόμοιο συμπέρασμα. Κάθε αλγόριθμος αντιπροσωπεύεται από μια μορφή αρχείου (PNG, JPG, GIF, κλπ.). Προς το παρόν πρόκειται να μιλήσουμε για τις μεθόδους που χρησιμοποιούνται συνήθως για τη συμπίεση των εικόνων, γεγονός που εξηγεί γιατί μερικοί από αυτούς καταλαμβάνουν πολύ λιγότερο χώρο.

Απώλεια συμπίεσης

Όταν σκέφτεστε τη λέξη "χωρίς απώλειες" στο πλαίσιο της συμπίεσης εικόνων, πιθανώς να σκεφτείτε μια μέθοδο που προσπαθεί να είναι πιο δύσκολη η διατήρηση της ποιότητας διατηρώντας παράλληλα ένα σχετικά μικρό μέγεθος εικόνας. Αυτό είναι πολύ κοντά στην αλήθεια. Ως μέθοδος, η συμπίεση χωρίς απώλειες ελαχιστοποιεί όσο το δυνατόν την παραμόρφωση, διατηρώντας τη διαύγεια της εικόνας. Αυτό επιτυγχάνεται με την κατασκευή ενός ευρετηρίου όλων των εικονοστοιχείων και την ομαδοποίηση των εικονοκυττάρων ίδιου χρώματος. Είναι σαν το πώς λειτουργεί η συμπίεση αρχείων, εκτός από την περίπτωση που έχουμε να κάνουμε με μικρότερες μονάδες δεδομένων.

Το DEFLATE είναι ένας από τους πιο συνηθισμένους αλγόριθμους για αυτό το είδος εργασίας. Βασίζεται σε δύο άλλους αλγόριθμους (Huffman και LZ77, αν είστε βιβλιοφάγος) και έχει έναν πολύ δοκιμασμένο και αληθινό τρόπο ομαδοποίησης δεδομένων που βρίσκονται μέσα στις εικόνες. Αντί να τρέχει απλώς το μήκος των δεδομένων και να αποθηκεύει πολλαπλές εμφανίσεις ενός εικονοστοιχείου με το ίδιο χρώμα σε μια μοναδική μονάδα δεδομένων (γνωστή ως κωδικοποίηση κατά μήκος χρόνου εκτέλεσης), αρπάζει τις διπλές συμβολοσειρές που βρέθηκαν σε ολόκληρο τον κώδικα και ορίζει ένα "δείκτη" για κάθε αντίγραφο που βρέθηκε. Όπου χρησιμοποιείται συχνά μια συγκεκριμένη σειρά δεδομένων (εικονοστοιχεία), αντικαθιστά όλα αυτά τα εικονοστοιχεία με ένα σταθμισμένο σύμβολο που επιπλέον συμπιέζει τα πάντα.

Παρατηρήστε πως με την κωδικοποίηση κατά μήκος και το DEFLATE, κανένα από τα εικονοστοιχεία δεν καταναλώνεται ή αναγκάζεται να αλλάξει το χρώμα. Η χρήση αυτής της μεθόδου οδηγεί απλώς σε μια εικόνα που είναι ίδια με το πρωτότυπο. Η μόνη διαφορά μεταξύ των δύο έγκειται στο μέγεθος του χώρου που έχει αναληφθεί στον σκληρό σας δίσκο!

Απώλεια συμπίεσης

Όπως υποδηλώνει το όνομα, η απώλεια συμπίεσης κάνει μια εικόνα να χάνει μέρος του περιεχομένου της. Όταν ληφθεί πολύ μακριά, μπορεί στην πραγματικότητα να καταστήσει την εικόνα ακατανόητη. Αλλά η απώλεια δεν σημαίνει ότι εξαλείφεις pixels. Στην πραγματικότητα υπάρχουν δύο αλγόριθμοι που χρησιμοποιούνται συνήθως για τη συμπίεση εικόνων με αυτόν τον τρόπο: μετασχηματισμός κωδικοποίησης και υποδειγματοληψία χρωμάτων . Ο πρώτος είναι πιο συνηθισμένος στις εικόνες και ο τελευταίος στο βίντεο.

Με την κωδικοποίηση μετασχηματισμού, τα χρώματα μιας εικόνας υπολογίζονται κατά μέσο όρο χρησιμοποιώντας έναν ειδικό μαθηματικό τύπο που ονομάζεται διακριτός μετασχηματισμός συνημιτόνου. Η εικόνα υποφέρει από απώλεια χρωμάτων και μπορεί να εισάγει αντικείμενα (παράξενη εικονοποίηση σε τυχαία σημεία της εικόνας) όταν χρησιμοποιείται υπερβολικά. Αυτός ο συγκεκριμένος αλγόριθμος αναπληρώνει την αδεξιμότητά του με ένα ισχυρό πλεονέκτημα: Μπορείτε να υπαγορεύσετε πόση ποιότητα θέλετε να παραμείνει με την εικόνα. Με τη συμπίεση χωρίς απώλειες, ο πλησιέστερος που μπορείτε να φτάσετε στο χειρισμό της ποιότητας ολιστικά είναι ο καθορισμός του αριθμού των χρωμάτων που πρέπει να έχει κάθε εικόνα.

Η υποδειγματοληψία του χρωμίου παίρνει μια άλλη προσέγγιση. Αντί του μέσου όρου των μικρών μπλοκ χρώματος, που μπορεί επίσης να επηρεάσει τη φωτεινότητα μιας εικόνας, προσπαθεί προσεκτικά να διατηρήσει τη φωτεινότητα την ίδια σε όλους τους τομείς. Αυτό κόβει τα μάτια σας να μην παρατηρούν εύκολα οποιαδήποτε βουτιά στην ποιότητα. Είναι πραγματικά ωραίο για τη συμπίεση των κινούμενων εικόνων, γι 'αυτό χρησιμοποιείται περισσότερο στις ροές βίντεο. Αυτό δεν σημαίνει ότι οι εικόνες δεν χρησιμοποιούν επίσης αυτόν τον αλγόριθμο.

Αλλά περιμένετε, υπάρχουν περισσότερα! Η Google έλαβε επίσης έναν πυροβολισμό σε έναν νέο αλγόριθμο απώλειας, γνωστός ως WebP. Αντί της μέσης πληροφορίας χρώματος, προβλέπει το χρώμα ενός εικονοστοιχείου εξετάζοντας τα θραύσματα που την περιβάλλουν. Τα δεδομένα που είναι πραγματικά γραμμένα στην προκύπτουσα συμπιεσμένη εικόνα είναι η διαφορά μεταξύ του προβλεπόμενου χρώματος και του πραγματικού χρώματος. Στο τέλος, πολλές από τις προβλέψεις θα είναι ακριβείς, με αποτέλεσμα μηδέν. Και αντί να εκτυπώνουν ολόκληρο ένα μάτσο μηδέν, απλώς συμπιέζει όλα αυτά σε ένα σύμβολο που τα αντιπροσωπεύει. Η ακρίβεια της εικόνας βελτιώνεται και η συμπίεση μειώνει το μέγεθος της εικόνας κατά μέσο όρο 25% σε σύγκριση με άλλους αλγόριθμους απώλειας, σύμφωνα με την Google.

Είναι χρόνος για ερωτήσεις και συζήτηση!

Εάν είστε νέοι στον κόσμο των αρχείων εικόνας, πιθανότατα θα βρείτε τουλάχιστον κάποιες από αυτές τις πληροφορίες σύγχυση. Αν έχετε κάποια ερώτηση, δημοσιεύστε τα στα σχόλια και θα κάνουμε το καλύτερο δυνατό για να το απαντήσουμε. Διαφορετικά, μπορείτε να συζητήσετε αυτό το θέμα!