Søg efter «PNG komprimering», og de topplacerede værktøjer lover «tabelfri» og «ingen kvalitetstab», men komprimeringsgraden kan variere med op til flere gange.
Forskellen ligger ikke i hvilken algoritme der er magisk, men i: at deres definition af «tabelfri» ikke er det samme.
Denne artikel forklarer forskellen og anbefaler værktøjer efter brugsscenarie.
Skelnen mellem to typer «tabelfri»
Rigtig tabelfri: ingen pixel ændres
PNG er selv en tabelfri format; dens størrelse bestemmes af to dele: hvordan pikslerne er arrangeret og hvordan Deflate-komprimering anvendes, samt hvor meget metadata der er indlejret i filen.
Rigtig tabelfri komprimering arbejder kun på disse to punkter:
- Skifter til en mere pladsbesparende lagring. For eksempel hvis billedet i virkeligheden kun bruger 200 farver, ændres det til paletlægemode; hvis der ikke er semitransparente områder, fjernes Alpha-kanalen; gråtonebilleder gemmes som gråtoner.
- Prøver bedre filtre og Deflate-parametre. Samme pixels kan have forskellig kode, hvilket kan give betydelige forskelle i størrelse. Når designværktøjer eksporterer PNG, søger de ofte hastighed frem for at prøve alle muligheder.
- Fjerner metadata. Udviklerinformationer, tidsstempler, tekstnoter, miniaturebilleder osv.
Når den komprimerede billede dekodes, er den pixelfor pixel identisk med originalen. Prisen er, at det ikke sparer så meget – det kan kun udnytte den overskydende væske, der opstår, når koden ikke er optimal.
«Ser ud som tabelfri»: faktisk tabende kvantisering
Værktøjer som TinyPNG og pngquant sparer mere, fordi de gør noget andet: sætter antallet af farver ned under 256 (kvantisering) og bruger dithering for at det ikke er synligt for det menneskelige øje.
Dette er tabende, pixels er allerede ændret. Det virker godt til de fleste webikoner og illustrationer, men hvis du har brug for, at pixels forbliver absolut uændrede – for eksempel UI-snipshots skal være strengt ens med designskisserne, screenshots skal kunne sammenlignes pikseldetaljer, eller materialet skal redigeres yderligere – bør du ikke bruge det.
Den nemmeste måde at tjekke om et værktøj er rigtigt tabelfri er at sammenligne det med ImageMagick
compare -metric AE original.png komprimeret.png null:
Hvis outputtet er0, er der ikke ændret én eneste pixel.
Anbefalede værktøjer til rigtig tabelfri PNG
Kommandolinje: oxipng (anbefales først)
oxipng er en tabelfri PNG-optimeringsskrevet i Rust, kan ses som en moderne efterfølger til det klassiske værktøj OptiPNG:
- Multithreadet, hurtig, egnet til batch-behandling.
-o 0til-o 6(og-o max) justerer komprimeringsgrad; jo højere, jo langsommere og mere pladsbesparende.- Valgfrit
--zopflifor yderligere komprimering, men det er meget langsommere. - Squoosh’ PNG tabelfri komprimering bruger dette værktøj.
bash
brew install oxipng
oxipng -o 2 --strip safe -r ./images # Behandler rekursivt en mappe, fjerner kun metadata der ikke påvirker visningen
Kommandolinje: zopflipng (yderst kompakt størrelse)
Leveret af Google, genbruger Zopfli-algoritmen til Deflate-komprimering og kan ofte udnytte lidt mere plads end oxipngs standardindstilling, men er meget langsommere; store billeder kan tage lang tid. God til «komprimer én gang, brug længe», som statiske ressourcer som webstedets logo, indbyggede ikoner i apps.
Kommandolinje: OptiPNG, pngcrush (klassiske værktøjer)
Begge er klassiske tabelfri PNG-optimerere; de ses stadig i mange værktøjsskabeloner. Funktionen er blevet dækket af oxipng, så der er ikke grund til at vælge dem i nye projekter.
Web: Squoosh
Googles online værktøj; vælg OxiPNG-koderen for PNG for at få tabelfri komprimering (vær opmærksom på ikke at afkrydse «Reduce palette», da det er tabende farvebegrænsning).
Fordelen er at det kræver ingen installation og tillader side-til-side sammenligning; ulemperne er at det kun kan behandle ét billede ad gangen, og man skal selv omdøbe og erstatte filen efter download. Godt til sjældent at komprimere et par billeder.
Mac grafisk brugerflade: ImageOptim
Open source gratis Mac-værktøj, der integrerer oxipng, Zopfli, pngcrush osv. og prøver dem alle for at finde den mindste størrelse. Standardindstillingen er tabelfri (tabende skal slås til manuelt).
Det har stor komprimeringskraft, men når alle optimerere er slået til, er det lidt langsomt; det overskriver også den oprindelige fil, så det er en god idé at lave en backup først.
Mac grafisk brugerflade: ImgZilla
ImgZilla er et macOS billedekomprimeringsværktøj, vi har udviklet. Det håndterer PNG på en direkte måde:
- Bruger oxipng til rigtig tabelfri komprimering med komprimeringsgrad 2 (samme som Squoosh standard), hvilket balancerer hastighed og størrelse. Ingen pixel ændres, hvilket kan verifikeres med
compare-kommandoen. - Ingen kvantisering, ingen farvebegrænsning, ingen formatændring, ingen størrelsesændring. PNG bliver stadig PNG efter komprimering.
- Komprimerer på stedet: filnavn og sti ændres ikke, så referencer i kode eller dokumenter skal ikke rettes.
- Træk hele mappen ind: scanner undermapper rekursivt, hopper over skjulte filer og
node_modules; JPG, GIF, WebP, HEIC, AVIF og SVG kan også håndteres samtidigt. - Oprindelig fil flyttes automatisk til papirkurven; hvis resultatet ikke er godt, kan den hentes tilbage via højreklik.
- Komprimerer ikke filer, der ikke sparer plads: filer med komprimeringsgrad under 0,4% markeres som «mindst mulig» og beholder deres oprindelige størrelse; de tæller ikke i gratis kvoten.
- Kører helt lokalt, ingen data uploades til en server.
Der er to punkter, der skal være tydelige:
- Det søger ikke den absolut mindste størrelse for PNG. Grad 2 er langt hurtigere end
-o maxeller Zopfli, men kan spare nogle procentpoint mindre. Hvis dit mål er at komprimere et logo til det sidste byte, er zopflipng eller ImageOptim bedre valg. - Fjerner som standard alle metadata i PNG, inklusiv farveprofil. Almindelige sRGB-billeder påvirkes ikke; men hvis et billede er indlejret med en bred farveområde som Display P3 (almindeligt i Mac-screenshot og designsoftware), kan farverne ændre sig lidt i software, der håndterer farvestyring. For billeder med strenge krav til farver kan du slå «behold EXIF-information» til i indstillingerne, så metadata bevares uændret.
Oversigt i tabel
| Værktøj | Type | Er rigtigt tabelfri | Batch | Hvem passer det til |
|---|---|---|---|---|
| oxipng | Kommandolinje | ✅ | ✅ | Udviklere, build-processer |
| zopflipng | Kommandolinje | ✅ | Kræver eget script | Ønsker absolut mindste størrelse, tager hensyn til hastighed |
| OptiPNG / pngcrush | Kommandolinje | ✅ | ✅ | Ældre projekter, som stadig bruger dem |
| Squoosh | Web | ✅ (OxiPNG, uden farvebegrænsning) | ❌ ét ad gangen | Sjældent at komprimere et par billeder |
| ImageOptim | Mac-applikation | ✅ (standard) | ✅ | Mac-brugere, der ønsker maksimal kompressionskraft |
| ImgZilla | Mac-applikation | ✅ | ✅ træk-mappe | Ønsker batch-komprimering, vil ikke ændre stier, og vil kunne fortryde |
| TinyPNG / pngquant | Web / Kommandolinje | ❌ tabende kvantisering | Afhænger af version | Kan acceptere farvebegrænsning, ønsker højere kompressionsgrad |
Hvordan vælge
- Kun pixels skal være uændrede, klar til kommandolinje: oxipng, sæt det ind i build-scriptet for én gang for altid.
- Ønsker maksimal komprimering af en enkelt fil: zopflipng.
- Mac med grafisk brugerflade til batch-behandling: ImageOptim har større kompressionskraft; ImgZilla er hurtigere, kan finde originalfilen tilbage fra papirkurven og håndterer også andre formater.
- Klar til let tabende komprimering for endnu mindre filstørrelse: TinyPNG / pngquant, men vær opmærksom på, at det ikke længere er tabelfri.
Et sidste råd: Hvor meget der kan spares med tabelfri komprimering afhænger af, hvordan PNG oprindeligt blev eksporteret. Billeder direkte fra designværktøjer eller helt uoptimerede PNG har ofte en del overskydende væske; allerede optimerede PNG har sjældent plads til yderligere sparring – hvis et værktøj viser «mindst mulig», betyder det, at det er godt, ikke at værktøjet er dårligt.
ImgZilla understøtter i øjeblikket kun macOS (12.3 og nyere), kan downloades fra Mac App Store. Den gratis version tillader 10 komprimeringer om dagen, kun hvis en komprimering er succesfuld – træk en mappe fyldt med PNG ind, og tjek derefter med
compare, om pixels faktisk ikke er ændret.
