LeanImg

Πώς μπορώ να αλλάξω το μέγεθος μιας JPG σε λιγότερο από 100 KB;

Η μετρημένη κλίμακα ποιότητας για μία φωτογραφία 538,6 KB, γιατί ο ρυθμιστής κολλάει στα 131 KB και γιατί η κοπή εικονοστοιχείων είναι ο μοχλός που πραγματικά επηρεάζει τον προϋπολογισμό byte.

· Updated

Μια φόρμα ανάρτησης λέει μέγιστο 100 KB. Η φωτογραφία σας είναι 538,6 KB. Η αντίδραση είναι να πιάσετε τον ρυθμιστή ποιότητας και να τον σύρετε αριστερά, και για μια μεγάλη φωτογραφία αυτή η αντίδραση δεν θα σας φέρει εκεί. Πήραμε ένα αρχείο και τρέξαμε όλη την κλίμακα: texture.jpg σε 3840x2160, 538,6 KB στο δίσκο. Ακόμα και με ποιότητα 30 καταλήγει στα 131 KB, και η εικόνα είναι ορατά κατεστραμμένη μέχρι τότε.

Ο αριθμός που πραγματικά ελέγχει το μέγεθος JPEG είναι ο αριθμός εικονοστοιχείων. Baseline JPEG κωδικοποιεί την εικόνα σε μπλοκ 8x8, οπότε η μείωση και των δύο διαστάσεων αφήνει ένα τέταρτο των μπλοκ για αποθήκευση. Αν έχετε μόνο τον ρυθμιστή, θα κολλήσετε γύρω από τα 131 KB σε ένα αρχείο αυτού του μεγέθους. Κάθε αριθμός παρακάτω προήλθε από τον δικό μας συμπιεστή και αλλαγέα μεγέθους, που τρέχει σε μια καρτέλα του προγράμματος περιήγησης. Δεν υπάρχει βήμα ανάρτησης για να περιμένετε.

Γιατί ο ρυθμιστής ποιότητας δεν με φέρνει στα 100 KB;

Αυτή είναι η κλίμακα, το ίδιο αρχείο πηγής κάθε φορά, τρέχοντας στον συμπιεστή εικόνας σε χειροκίνητη λειτουργία. Η έξυπνη λειτουργία επιλέγει την προεπιλογή κάθε κωδικοποιητή, που είναι 80 για JPEG και WebP, 63 για AVIF και χωρίς απώλειες για PNG.

texture.jpg, 3840x2160, 538,6 KB πηγή, JPEG έξοδος μέσω MozJPEG.
ΡύθμισηΈξοδοςΑλλαγή
Ρυθμιστής 90347,8 KB-35%
Έξυπνος (ρυθμιστής 80)286,1 KB-47%
Ρυθμιστής 60212,4 KB-61%
Ρυθμιστής 30131 KB-76%

Εξήντα σημεία του ρυθμιστή αγόρασαν 216,8 KB. Η τελευταία διαδρομή, από 60 έως 30, θυσίασε πολλή ορατή λεπτομέρεια για 81,4 KB. Μια φωτογραφία 3840x2160 έχει 8,3 εκατομμύρια εικονοστοιχεία για περιγραφή, και υπάρχει ένα κατώφλι κάτω από πόσα bytes θα περιγράψουν αυτά σε αυτό το μέγεθος. Το κατώφλι είναι πραγματικό.

Κάρτα αποτελέσματος συμπιεστή που δείχνει το texture.jpg μειωμένο από 538,6 KB σε 131 KB με ποιότητα 30
Το κατώτατο σημείο της κλίμακας: 131 KB, μείωση 76%, και ακόμα 31 KB πάνω από το όριο των 100 KB.

Γιατί η ποιότητα 30 δεν είναι πραγματικά 30;

Αυτό μπερδεύει τους ανθρώπους, και είναι δικό μας να το εξηγήσουμε. Όταν η πηγή είναι JPEG, ο συμπιεστής μας διαβάζει τους πίνακες ποσοτικοποίησης από τα πρώτα 64 KB του αρχείου και εκτιμά την ποιότητα στην οποία αποθηκεύτηκε. Ο ρυθμιστής σας τότε κλιμακώνει αυτή την εκτίμηση. Μια φωτογραφία που αποθηκεύτηκε με ποιότητα 60, με τον ρυθμιστή στο 80, κωδικοποιείται σε 48. Η επανακλιμάκωση σταματά μια δεύτερη διαδικασία από το να διεκδικήσει ποιότητα που οι εικονοστοιχεία δεν μπορούν να παραδώσουν, γιατί η επανακωδικοποίηση ενός αρχείου ποιότητας 60 σε 90 απλώς ξοδεύει bytes περιγράφοντας ζημιά που είναι ήδη ενσωματωμένη. Ο κωδικοποιητής από κάτω είναι MozJPEG. Ένα ακόμα πράγμα που αξίζει να γνωρίζετε: η συμπίεση αφαιρεί κάθε κομμάτι μεταδεδομένων, EXIF, GPS, προφίλ ICC και ενσωματωμένη μικρογραφία. Η προσανατολισμός επιβιώνει.

Γιατί η εκτίμηση δίπλα στον ρυθμιστή δεν ταιριάζει με το αποτέλεσμα;

Γιατί είναι μια καμπύλη, όχι μια κωδικοποίηση. Ο πίνακας εκτυπώνει αυτόν τον αριθμό πριν τρέξει οτιδήποτε, από μόνο δύο πράγματα: το μέγεθος του αρχείου σας και τη θέση του ρυθμιστή. Είναι τα αρχικά bytes πολλαπλασιασμένα με τον ρυθμιστή δια 100, υψωμένα στη δύναμη του 1,8. Ποτέ δεν βλέπει ένα εικονοστοιχείο της εικόνας σας, και δεν γνωρίζει για την επανακλιμάκωση παραπάνω, οπότε στο παράδειγμα ποιότητας 60 εκτυπώνει έναν αριθμό για 80 ενώ ο κωδικοποιητής πρόκειται να χρησιμοποιήσει 48.

Στο ίδιο αρχείο δοκιμής 538,6 KB η διαφορά είναι μεγάλη, και αλλάζει κατεύθυνση σε όλη την κλίμακα. Στον ρυθμιστή 90 ο πίνακας προέβλεψε 445,5 KB έναντι 347,8 KB στην πραγματικότητα, 28% υψηλότερα. Στον ρυθμιστή 30 προέβλεψε 61,7 KB έναντι 131 KB στην πραγματικότητα, 53% χαμηλότερα. Διαβάστε ξανά αυτό το δεύτερο αν στοχεύετε σε όριο 100 KB: η εκτίμηση λέει ότι το περάσατε κατά 38 KB τη στιγμή που ο κωδικοποιητής πρόκειται να το χάσει κατά 31. Τα KB στην κάρτα αποτελέσματος είναι ο μόνος αριθμός που αξίζει να ενεργήσετε. Στη λειτουργία παλέτας PNG δεν υπάρχει καθόλου εκτίμηση, και ο πίνακας εκτυπώνει μια προειδοποίηση στη θέση της.

Πώς μπορώ πραγματικά να αποκτήσω μια JPG κάτω από 100 KB;

Κόψτε τα εικονοστοιχεία πρώτα, στη συνέχεια συμπιέστε. Ανοίξτε τον αλλαγέα μεγέθους και χρησιμοποιήστε τις προεπιλεγμένες ποσοστά, που είναι 25, 50 και 75. Το πενήντα τοις εκατό μειώνει το 3840x2160 σε 1920x1080, ένα τέταρτο των εικονοστοιχείων. Το είκοσι πέντε τοις εκατό το μειώνει σε 960x540, το ένα δέκατο έκτο. Υπάρχουν επίσης 15 κοινωνικά προεπιλεγμένα μεγέθη σε σταθερές διαστάσεις, από ένα τετράγωνο Instagram 1080x1080 έως μια μπάνερ YouTube 2560x1440, συν μια λειτουργία ακριβών εικονοστοιχείων με λειτουργίες κάλυψης, περιεχομένου και προσαρμογής. Αυτή η λειτουργία ακριβών εικονοστοιχείων είναι πώς ένα τετράγωνο διαβατηρίου 600 x 600 πληκτρολογείται χωρίς να συμπιέσει ένα πρόσωπο. Αν στοχεύετε σε 100 KB από μια φωτογραφία 4K, ξεκινήστε από το 25% και προχωρήστε.

Δύο πράγματα για τον αλλαγέα μεγέθους αξίζουν να γνωρίζετε πρώτα. Η έξοδος PNG παραμένει χωρίς απώλειες, και κάθε άλλη μορφή επανακωδικοποιείται με ποιότητα 90 από προεπιλογή, οπότε μια JPEG που περνά και από τα δύο εργαλεία κωδικοποιείται δύο φορές. Οι κινούμενες πηγές βγαίνουν ως ένα στατικό καρέ. Και όταν η έξοδος του συμπιεστή θα ήταν μεγαλύτερη από το αρχείο που του δώσατε, επιστρέφει το πρωτότυπό σας ανέγγιχτο.

Θα με φέρει γρηγορότερα το WebP ή το AVIF;

Ίδιο αρχείο texture.jpg, 538,6 KB, τρεις κωδικοποιητές σε ίσες θέσεις ρυθμιστή.
ΚωδικοποιητήςΡυθμιστής 80Ρυθμιστής 63
JPEG286,1 KBδεν μετρήθηκε
WebP290,3 KB200,6 KB
AVIF312,7 KB186,9 KB

Διαβάστε αυτόν τον πίνακα δύο φορές. Στην ίδια θέση ρυθμιστή 80, το JPEG παρήγαγε το μικρότερο αρχείο και το AVIF το μεγαλύτερο, που φαίνεται αντίστροφο μέχρι να θυμηθείτε την επανακλιμάκωση παραπάνω. Το 80 του JPEG κλιμακώθηκε σε σχέση με την εκτιμώμενη ποιότητα της πηγής, οπότε δεν ήταν πραγματικά 80, ενώ το WebP και το AVIF παίρνουν τον αριθμό κυριολεκτικά. Ρίξτε τους στην έξυπνη προεπιλογή του AVIF 63 και οι σύγχρονοι κωδικοποιητές προχωρούν μπροστά: 200,6 KB για το WebP, 186,9 KB για το AVIF. Και οι δύο είναι ακόμα πολύ μακριά από τα 100 KB σε 3840x2160, που είναι το όλο θέμα. Το AVIF επίσης κόστισε περίπου 10 έως 11 δευτερόλεπτα ανά κωδικοποίηση σε αυτή τη μηχανή, ενώ το JPEG και το WebP επέστρεψαν αμέσως, και η υποστήριξη προγράμματος περιήγησης είναι νεότερη. Ο δρόμος μας JPG σε WebP είναι κλειδωμένος σε 4:2:0 χρώμα, οπότε οι σκληρές κόκκινες άκρες μαλακώνουν λίγο.

Τι γίνεται αν το αρχείο μου είναι PNG με διαφάνεια;

Τελείως διαφορετικός μοχλός. Τρέξαμε το alpha.png, 900x606 και 942,4 KB με πραγματικό κανάλι άλφα, μέσω και των δύο λειτουργιών PNG. Η επιλογή "Καμία συμπίεση" είναι oxipng στο επίπεδο 3, πλήρως χωρίς απώλειες, και επέστρεψε 383,9 KB, μείωση 59% με κάθε εικονοστοιχείο ανέγγιχτο. Η επιλογή "Μικρότερο μέγεθος αρχείου" τρέχει libimagequant, η οποία μειώνει την εικόνα σε μια παλέτα, και επέστρεψε 98,3 KB. Αυτό είναι 90% λιγότερο, και ξεπερνά έναν προϋπολογισμό 100 KB χωρίς να αγγίζει τις διαστάσεις. Οι παλέτες δημιουργούν ομαλές κλίμακες, οπότε ελέγξτε έναν ουρανό ή μια απαλή σκιά πριν το στείλετε. Η διαφάνεια επιβιώνει και στις δύο λειτουργίες. Ζητήστε έξοδο JPEG και το κανάλι άλφα θα χαθεί, θα είναι ενσωματωμένο σε λευκό.

Μπορώ να κόψω για να φτάσω στα 100 KB;

Μερικώς. Η κοπή αφαιρεί εικονοστοιχεία, οπότε αφαιρεί bytes. Ο κόπτης μας δέχεται ένα αρχείο τη φορά μέχρι 10 MB και προσφέρει οκτώ προεπιλεγμένα αναλογίας συν και μια προσαρμοσμένη αναλογία W:H. Δεν υπάρχει πεδίο για να πληκτρολογήσετε ένα στοχευόμενο πλάτος σε εικονοστοιχεία, οπότε δεν μπορείτε να στοχεύσετε σε ακριβές μέγεθος εξόδου, και κάθε κοπή μιας μορφής με απώλειες επανακωδικοποιείται σε σκληρά κωδικοποιημένη ποιότητα 92. Ένα GIF επιστρέφει ως ένα στατικό καρέ PNG. Για να πετύχετε έναν προϋπολογισμό byte, οι προεπιλογές ποσοστών του αλλαγέα μεγέθους σας δίνουν μια πιο άμεση διαχείριση.

Κάνει κανένα από αυτά να ανεβάσει τη φωτογραφία μου;

Όχι. Αυτή η εφαρμογή δεν έχει διαδρομές API και καμία ενέργεια διακομιστή, και οι μόνες αιτήσεις δικτύου που κάνει είναι αιτήσεις ίδιου προορισμού για τα δικά της περιουσιακά στοιχεία και τους κωδικοποιητές WASM. Το αρχείο σας αποκωδικοποιείται σε έναν καμβά και κωδικοποιείται ξανά από το WASM στην ίδια καρτέλα. Τα περισσότερα άλλα εργαλεία σε αυτή την κατηγορία λειτουργούν αντίστροφα: η εικόνα σας ταξιδεύει στον διακομιστή τους και παραμένει στη μνήμη τους μέχρι να ενεργοποιηθεί μια χρονομετρημένη διατήρηση. Αυτή είναι η διαφορά που αναλύει η σελίδα απορρήτου. Είναι επίσης γιατί μια παρτίδα εδώ περιορίζεται σε 10 αρχεία και 50 MB, καθώς ο δικός σας CPU κάνει τη δουλειά. Αυτή η ίδια περιοριστική είναι γιατί ένας φάκελος με 300 αρχεία δεν είναι δουλειά προγράμματος περιήγησης.