Είναι η μορφή PNG χωρίς απώλεια δεδομένου ότι έχει παράμετρο συμπίεσης;

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

Η σημερινή συνεδρία «Ερώτηση και απάντηση» μας προσφέρει ευγενική προσφορά του SuperUser - μια υποδιαίρεση του Stack Exchange, μιας ομαδοποίησης ιστότοπων Q&A με γνώμονα την κοινότητα.

Το ερώτημα

Ο αναγνώστης SuperUser pkout θέλει να μάθει εάν η ποιότητα μιας εικόνας PNG επηρεάζεται από το επιλεγμένο επίπεδο συμπίεσης:

Όπως το καταλαβαίνω, τα αρχεία PNG χρησιμοποιούν συμπίεση χωρίς απώλειες. Ωστόσο, όταν χρησιμοποιώ ένα πρόγραμμα επεξεργασίας εικόνων όπως το Gimp και προσπαθώ να αποθηκεύσω μια εικόνα ως αρχείο PNG, ζητά ένα επίπεδο συμπίεσης που κυμαίνεται μεταξύ 0 και 9.

Εάν έχει μια παράμετρο συμπίεσης που επηρεάζει την οπτική ακρίβεια της συμπιεσμένης εικόνας, πώς είναι το PNG χωρίς απώλειες; Μπορεί κάποιος να μου εξηγήσει αυτό; Παίρνω συμπεριφορά χωρίς απώλειες μόνο όταν ορίζω το επίπεδο συμπίεσης σε 9;

Υπάρχει διαφορά στην ποιότητα της εικόνας ανάλογα με το επίπεδο συμπίεσης που επιλέγετε;

Η απάντηση

Οι συνεργάτες SuperUser LordNeckbeard και jjlin έχουν την απάντηση για εμάς. Πρώτα επάνω, LordNeckbeard:

Το PNG είναι συμπιεσμένο, αλλά χωρίς απώλειες

Το επίπεδο συμπίεσης είναι μια αντιστάθμιση μεταξύ του μεγέθους του αρχείου και της ταχύτητας κωδικοποίησης / αποκωδικοποίησης. Για υπερβολική γενίκευση, ακόμη και μορφές χωρίς εικόνα όπως το FLAC έχουν παρόμοιες ιδέες.

Διαφορετικά επίπεδα συμπίεσης, ίδια αποκωδικοποιημένη έξοδος

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

Δημιουργία αρχείων PNG

  • Από προεπιλογή, το ffmpeg θα χρησιμοποιήσει το -compression_level 100 για έξοδο PNG.
  • Μια γρήγορη, ατημέλητη δοκιμή έδειξε ότι το 100 (το υψηλότερο επίπεδο συμπίεσης) χρειάστηκε περίπου τρεις φορές περισσότερο για την κωδικοποίηση και πέντε φορές περισσότερο για την αποκωδικοποίηση από το 0 (το χαμηλότερο επίπεδο συμπίεσης) σε αυτό το παράδειγμα.

Σύγκριση μεγέθους αρχείου

Αποκωδικοποιήστε τα αρχεία PNG και εμφανίστε MD5 Hash

Δεδομένου ότι και οι δύο κατακερματισμοί είναι οι ίδιοι, μπορείτε να είστε σίγουροι ότι οι αποκωδικοποιημένες έξοδοι (τα μη συμπιεσμένα ακατέργαστα αρχεία) είναι ακριβώς τα ίδια.

Ακολουθείται από την απάντηση του jjlin:

Το PNG είναι χωρίς απώλειες. Το GIMP πιθανότατα δεν χρησιμοποιεί την καλύτερη επιλογή διατύπωσης σε αυτήν την περίπτωση.

Σκεφτείτε το ως ποιότητα συμπίεσης ή επίπεδο συμπίεσης . Με χαμηλότερη συμπίεση, λαμβάνετε ένα μεγαλύτερο αρχείο, αλλά απαιτείται λιγότερος χρόνος για την παραγωγή, ενώ με υψηλότερη συμπίεση, λαμβάνετε ένα μικρότερο αρχείο που χρειάζεται περισσότερο χρόνο για την παραγωγή.

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

Έχετε κάτι να προσθέσετε στην εξήγηση; Ήχος στα σχόλια. Θέλετε να διαβάσετε περισσότερες απαντήσεις από άλλους χρήστες τεχνολογίας Stack Exchange; Δείτε ολόκληρο το νήμα συζήτησης εδώ.