Av en eller annen grunn kan du faktisk passe 2 millioner piksler til et bilde uten å bruke 1, 97 megabyte plass. Jeg fant en søt 1080p bakgrunnsbilde (som har omtrent 2 millioner piksler) og lastet ned den. Kontrollerer egenskapene, jeg la merke til noe rart: Det tok bare 230 kB plass på harddisken min. Hvorfor det? For noen som ikke forstår bildekompresjonen, virker det som magisk. Men når du blir kjent med emnet, forstår du hvordan noen bilder er større enn andre, til tross for mengden piksler de opptar på skjermen. Tiden er kort, så la oss ta et raskt dykk inn i de grunnleggende prinsippene bak bildekomprimering.

Metoder, tilnærminger, algoritmer Galore.

Det er naivt å tro at det bare er en måte å komprimere et bilde på. Det finnes forskjellige metoder, hver med en unik tilnærming til et felles problem, og hver tilnærming blir brukt i forskjellige algoritmer for å komme til en lignende konklusjon. Hver algoritme er representert av et filformat (PNG, JPG, GIF, etc.). For nå skal vi snakke om metodene som vanligvis brukes til å komprimere bilder, noe som forklarer hvorfor noen av dem tar opp så mye mindre plass.

Lossless kompresjon

Når du tenker på ordet "lossless" i sammenheng med bildekomprimering, tenker du sannsynligvis på en metode som prøver å være vanskeligst å bevare kvalitet, samtidig som den opprettholder en relativt liten bildestørrelse. Det er veldig nær sannheten. Som en metode minimerer lossless komprimering mest mulig forvrengning, og bevarer bildeklarheten. Det gjør dette ved å bygge en indeks på alle piksler og gruppere samme fargede piksler sammen. Det er liksom hvordan filkomprimering fungerer, bortsett fra at vi har å gjøre med mindre dataenheter.

DEFLATE er blant de vanligste algoritmer for denne typen jobb. Den er basert på to andre algoritmer (Huffman og LZ77, hvis du er en bokorm), og den har en veldig prøvd og sann måte å gruppere data på innenfor bilder. I stedet for bare å løpe gjennom dataens lengde og lagre flere forekomster av en piksel med samme farge i en enkelt dataenhet (kjent som kjørlengdekoding), griper det duplikatstrenger som finnes i hele koden og setter en "peker" for hver duplikat funnet. Uansett hvor en bestemt streng av data (piksler) brukes ofte, erstatter den alle disse pikslene med et vektet symbol som komprimerer alt videre.

Legg merke til hvordan du kjører med lengdekode og DEFLATE, ingen av pikslene blir faktisk spist opp eller tvunget til å skifte farge. Ved hjelp av denne metoden blir det bare et bilde som er identisk med den rå originalen. Den eneste forskjellen mellom de to ligger i hvor mye plass faktisk er tatt opp på harddisken din!

Lossy Compression

Som navnet antyder, gjør lossy komprimering et bilde å miste noe av innholdet. Når det tas for langt, kan det faktisk gjøre bildet ukjent. Men lossy betyr ikke at du eliminerer piksler. Det er faktisk to algoritmer som vanligvis brukes til å komprimere bilder på denne måten: transformere koding og chroma subsampling . Den tidligere er mer vanlig i bilder og sistnevnte i video.

Med transformasjonskoding blir et bilde farger gjennomsnittet ut ved hjelp av en spesiell matematisk formel kalt diskret cosinus transformasjon. Bildet har fargestap og kan introdusere artefakter (merkelig pixellasjon på tilfeldige punkter i bildet) når det brukes overdrevet. Denne spesielle algoritmen gjør opp for klumpen sin med en stor fordel: Du kan diktere hvor mye kvalitet du vil forbli med bildet. Med lossless komprimering er det nærmeste du kan komme til å manipulere kvalitet holistisk, ved å angi antall farger hvert bilde skal ha.

Chroma subsampling tar en annen tilnærming. I stedet for å gjennomsnittlig små fargeklosser, som også kan påvirke lysstyrken på et bilde, forsøker det forsiktig å holde lysstyrken det samme på alle områder. Dette trekker øynene dine til å ikke merke noen dykk i kvalitet. Det er faktisk flott for komprimering av animasjoner, og det er derfor det brukes mer i videostrømmer. Det er ikke å si at bildene ikke også bruker denne algoritmen.

Men vent, det er mer! Google tok også et skudd på en ny lossy-algoritme, kjent som WebP. I stedet for gjennomsnittlig fargeinformasjon forutser den fargen på en piksel ved å se på fragmentene som omgir den. Dataene som faktisk er skrevet inn i det resulterende komprimerte bildet, er forskjellen mellom den forutsagte farge og den faktiske fargen. Til slutt vil mange av spådommene være nøyaktige, noe som resulterer i null. Og i stedet for å skrive ut en hel masse nuller, komprimerer de bare alle sammen til et symbol som representerer dem. Bildens nøyaktighet er forbedret, og kompresjonen reduserer bildestørrelsen med i gjennomsnitt 25 prosent sammenlignet med andre lossyalgoritmer, ifølge Google.

Det er tid for spørsmål og diskusjon!

Hvis du er ny i verden av bildefiler, vil du sikkert finne minst en liten bit av denne informasjonen forvirrende. Hvis du har et spørsmål, legg det inn i kommentarene, og vi vil gjøre vårt beste for å svare på det. Ellers er du velkommen til å diskutere dette!