Sådan virker oCompress
Hvad der sker, når du slipper en fil, hvordan du selv kan tjekke, at intet bliver uploadet, og hvad komprimering med og uden tab egentlig betyder.
Den korte version
Når du åbner en side med et værktøj, henter din browser siden og et lille program, komprimeringsværktøjet. Når du tilføjer en fil, læser browseren den, værktøjet behandler den på din egen processor, og resultatet gives tilbage til dig som en download. Filen sendes på intet tidspunkt over netværket. Hele forløbet ser sådan ud:
- Indlæs. Siden og værktøjets brugerflade indlæses først. Motoren til en filtype (billeder, video og lyd eller dokumenter) hentes først, når du tilføjer en fil af den type, så du aldrig downloader kode, du ikke bruger.
- Læs. Din browser giver siden adgang til præcis de filer, du har valgt, og intet andet på din enhed.
- Komprimer. Arbejdet kører i en Web Worker, en baggrundstråd i browseren, så siden bliver ved med at reagere, og du kan annullere når som helst.
- Gem. Den komprimerede fil oprettes i hukommelsen (store videoer i browserens private lager) og gemmes via browserens almindelige download, én ad gangen eller som en ZIP-fil.
Det kører i din browser
Moderne browsere kan køre kompileret kode med næsten native hastighed via WebAssembly, og de giver websider adgang til enhedens hardwarebaserede videokodere via en grænseflade kaldet WebCodecs. oCompress bruger begge dele:
- Billeder: MozJPEG til JPEG, OxiPNG og en palettekvantiserer til PNG, WebP-koderen fra Googles libwebp, libavif til AVIF, SVGO til SVG og dedikerede dekodere og kodere til GIF og TIFF. Codecs til JPEG, PNG, WebP og AVIF er kompileret til WebAssembly.
- Video og lyd: WebCodecs med biblioteket Mediabunny til at læse og skrive containere som MP4 og WebM. Kodningen bruger hardwarekoderen i din grafikchip, hvor den findes, og derfor kan den være hurtig selv i en browser. MP3-filer skrives af koderen LAME og FLAC-filer af libFLAC, begge kompileret til WebAssembly og kun indlæst, når der er brug for dem.
- Dokumenter: vores egen kode, bygget på open source-biblioteker til PDF og ZIP, åbner PDF'er og Office-filer, komprimerer billederne indeni igen med billedcodecs'ene og skriver en ny fil.
Alle biblioteker, vi leverer, er open source: de fleste under tilladende licenser som MIT, BSD og Apache 2.0, Mediabunny under MPL 2.0 og MP3-koderen LAME under LGPL som en separat fil, der kan udskiftes. Se listen over biblioteker med versioner og licenser.
Sådan kan du tjekke, at intet bliver uploadet
Du behøver ikke tage vores ord for det. To enkle test:
- Gå offline. Åbn en side med et værktøj, komprimer én fil, så motoren er indlæst, slå derefter wi-fi eller mobildata fra, og komprimer en anden fil af samme type. Det virker, fordi intet har brug for netværket.
- Hold øje med netværket. Tryk på F12 i Chrome, Edge eller Firefox, åbn fanen Netværk, og komprimer en fil. Du vil se komprimeringskoden blive indlæst fra vores side og forespørgsler fra statistik og annoncer, men ingen forespørgsel med din fil. Et foto på 10 MB ville dukke op som en upload på 10 MB; der er ingen.
Siden sender anonyme brugshændelser til Google Analytics, fx "en JPG på et par megabyte blev komprimeret". Disse hændelser indeholder værktøjet, filtypen og størrelsen, besparelsen og behandlingstiden som grove intervaller, aldrig filnavnet eller indholdet.
Tabsfri komprimering: samme indhold, færre bytes
Tabsfri komprimering finder redundans, ting der er gemt mere end én gang, eller som kan forudsiges, og skriver dem mere kompakt. Afkodningen vender processen præcist om. Tre idéer går igen i næsten alle tabsfri formater:
- Forudsigelse. Nabopixels i et billede eller på hinanden følgende samples i lyd ligner som regel hinanden. Gemmer man den lille forskel fra en forudsigelse i stedet for den fulde værdi, står man tilbage med tal, der for det meste ligger tæt på nul. PNG-filtre og FLAC's lineære prædiktor virker på den måde.
- Gentagelse. Gentagne sekvenser erstattes af en kort henvisning til den tidligere kopi. Det er LZ77-delen af DEFLATE, der bruges i ZIP-, PNG- og Office-filer.
- Entropikodning. Hyppige værdier får korte koder og sjældne værdier lange (Huffman- eller aritmetisk kodning).
Tabsfri komprimering har en naturlig grænse: tilfældig støj kan ikke forudsiges, så et kornet foto eller en støjfyldt optagelse bliver aldrig meget mindre uden tab. Det er også derfor, at komprimering af en fil, der allerede er komprimeret, fx en JPEG i en ZIP, næsten intet sparer.
Komprimering med tab: fjern det, du ikke vil savne
Codecs med tab går videre ved at kassere information, som menneskers øjne og ører knap opfatter. JPEG og WebP gemmer farver i lavere opløsning end lysstyrke og afrunder fine højfrekvente detaljer væk. MP3, AAC og Opus dropper lyde, der overdøves af kraftigere lyde. Videocodecs som H.264 gemmer et helt billede ind imellem og derimellem mest bevægelse og ændringer.
Indstillingen for kvalitet eller bitrate bestemmer, hvor meget der kasseres. Ved moderate indstillinger er tabet meget svært at bemærke; går du for langt, opstår typiske artefakter: blokke og glorier i billeder, en metallisk lyd eller en lyd som under vand i lyd og udtværing i hurtige videoscener.
Det lover værktøjerne, og det lover de ikke
- Du får aldrig en større fil. Hvis resultatet ikke er mindre, giver værktøjet originalen tilbage og fortæller dig, at den allerede er optimal.
- Dokumenter og lydfiler giver identiske bytes for den samme fil og de samme indstillinger; hardwarebaserede videokodere kan afvige med nogle få bytes fra kørsel til kørsel.
- Tekst i dokumenter forbliver tekst; sider laves aldrig om til billeder.
- Billedmetadata som GPS-position fjernes som standard, mens farveprofil og rotation bevares. Videometadata som sted, enhed og datoer fjernes også som standard; lyd beholder sine tags og coverbilleder, medmindre du slår det fra.
Det, vi ikke kan love, er en bestemt procentsats. Besparelsen afhænger helt af, hvordan filen blev lavet: et telefonfoto eller en scannet PDF har som regel masser af plads, en fil, der allerede er optimeret, har lidt. Værktøjet viser de præcise størrelser før og efter for hver fil.
Grænser for komprimering i en browser
En browserfane er en sandkasse med begrænset hukommelse, og det sætter rammerne for, hvad der er praktisk muligt. Værktøjet tager imod billeder op til 200 MB og 100 megapixel, PDF- og Office-filer op til 300 MB og video og lyd op til 4 GB på en computer (1 GB på telefoner), selvom lange 4K-videoer stadig kan være for store til en fanes hukommelse. Hastigheden afhænger af din hardware: i vores test på en hurtig Windows-pc i Chrome tog et minut video i 1080p omkring 20 sekunder og et foto på 24 megapixel omkring 2,5 sekunder; telefoner kan være meget langsommere. Video og de fleste lydkonverteringer kræver WebCodecs, som aktuelle versioner af Chrome, Edge og Opera samt Firefox 130+ og Safari 26+ har; WAV og AIFF kan blive til MP3, FLAC eller WAV selv uden.
Nogle få formater har slet ingen dekoder i browsere, fx WMA, AVI og WMV, og gamle binære Office-filer kan ikke omskrives sikkert. For dem forklarer værktøjet mulighederne i stedet for at lave en fil, der kan være beskadiget. Når en opgave er for stor til en browser, er et program på computeren som HandBrake til video eller LibreOffice til dokumenter den ærlige anbefaling.