Hur bildkomprimering fungerar: Grunderna
Av någon anledning kan du faktiskt passa 2 miljoner pixlar till en bild utan att använda 1, 97 megabyte utrymme. Jag hittade en söt 1080p tapet (som har ungefär 2 miljoner pixlar) och laddade ner den. Kontrollera egenskaperna, jag märkte något märkligt: Det tog bara upp 230 kB utrymme på min hårddisk. Varför är det så? För någon som inte riktigt förstår bildkomprimering verkar det som magi. Men när du väl känner till ämnet förstår du hur vissa bilder är större än andra trots hur många pixlar de upptar på din skärm. Tiden är kort, så låt oss ta en snabb dyka in i de grundläggande principerna bakom bildkomprimering.
Metoder, tillvägagångssätt, algoritmer Galore.
Det är naivt att tro att det bara finns ett sätt att komprimera en bild. Det finns olika metoder, var och en med ett unikt förhållningssätt till ett gemensamt problem, och varje metod används i olika algoritmer för att nå en liknande slutsats. Varje algoritm representeras av ett filformat (PNG, JPG, GIF, etc.). För närvarande ska vi prata om de metoder som vanligtvis används för att komprimera bilder, vilket förklarar varför några av dem tar upp så mycket mindre utrymme.
Lossless kompression
När du tänker på ordet "lossless" i samband med bildkomprimering, tänker du förmodligen på en metod som gör det svårt att bevara kvaliteten samtidigt som den upprätthåller en relativt liten bildstorlek. Det är väldigt nära sanningen. Som en metod minimerar förlustfri komprimering så mycket som möjligt, för att bevara bild klarhet. Det gör detta genom att bygga ett index över alla pixlar och gruppera samma färgade bildpunkter tillsammans. Det är typiskt som hur filkomprimering fungerar, förutom att vi hanterar mindre dataenheter.
DEFLATE är bland de vanligaste algoritmerna för denna typ av jobb. Den är baserad på två andra algoritmer (Huffman och LZ77, om du är en bokmask) och det har ett väldigt försökt sätt att gruppera data som finns i bilder. Istället för att bara springa igenom dataens längd och lagra flera instanser av en pixel med samma färg i en enda dataenhet (känd som körlängdskodning), griper den dubbla strängar som finns i hela koden och sätter en "pekare" för varje duplikat som hittats. Varhelst en viss sträng data (pixlar) används ofta ersätter den alla dessa pixlar med en viktad symbol som komprimerar allting ytterligare.
Lägg märke till hur med kodlängden och DEFLATE, ingen av pixlarna äts faktiskt upp eller tvingas ändra färg. Att använda denna metod resulterar rent i en bild som är identisk med det råa originalet. Den enda skillnaden mellan de två ligger i hur mycket utrymme faktiskt tas upp på din hårddisk!
Lossy Compression
Som namnet antyder gör lossy-komprimeringen en bild att förlora något av dess innehåll. När det tas för långt kan det faktiskt göra bilden oigenkännlig. Men förlust innebär inte att du eliminerar pixlar. Det finns faktiskt två algoritmer som vanligtvis används för att komprimera bilder på detta sätt: omvandla kodning och chroma-subsampling . Den förra är vanligare i bilder och den senare i video.
Med omvandlingskodning är en bilds färger i genomsnitt utrustad med en särskild matematisk formel som kallas diskret cosinusomvandling. Bilden lider av färgförlust och kan införa artefakter (konstig pixellering i slumpmässiga punkter på bilden) när den används för mycket. Denna speciella algoritm utgör sin klumpighet med en stark fördel: Du kan diktera precis hur mycket kvalitet du vill förbli med bilden. Med förlustfri komprimering kan det närmaste man komma för att manipulera kvaliteten holistiskt genom att ställa in antalet färger som varje bild ska ha.
Chroma-subsampling tar ett annat tillvägagångssätt. I stället för att medelvärda små färgblock, som också kan påverka ljusets ljusstyrka, försöker man noggrant att hålla ljusstyrkan densamma på alla områden. Detta trickar dina ögon på att inte lätt märka något dopp i kvalitet. Det är faktiskt bra för komprimering av animationer, varför det används mer i videoströmmar. Det är inte att säga att bilder inte också använder denna algoritm.
Men vänta, det finns mer! Google tog också ett skott på en ny lossy algoritm, känd som WebP. I stället för medelvärdesfärginformation förutspår den en pixels färg genom att titta på fragmenten som omger den. Data som faktiskt skrivs in i den resulterande komprimerade bilden är skillnaden mellan den förutspådda färgen och den faktiska färgen. I slutändan kommer många av förutsägelserna att vara korrekta, vilket resulterar i en noll. Och istället för att skriva ut en hel massa nollar, komprimerar den bara alla till en symbol som representerar dem. Bildnoggrannheten förbättras och komprimeringen minskar bildstorleken med i genomsnitt 25 procent jämfört med andra lossyalgoritmer, enligt Google.
Det är dags för frågor och diskussion!
Om du är ny i världen av bildfiler hittar du förmodligen åtminstone lite av denna information förvirrande. Om du har en fråga, skicka in den i kommentarerna och vi gör vårt bästa för att svara på det. Annars är du välkommen att diskutera detta!