Loading AI tools
format för digitala bilder Från Wikipedia, den fria encyklopedin
Portable Network Graphics (PNG) är ett format för digitala bilder. PNG är speciellt vanligt för icke-fotografiska bilder på Internet, som ikoner, ritningar, grafik med mera. Delvis utvecklades PNG som en ersättare för den åldrade och juridiskt omstridda GIF-standarden och har därför många av det formatets möjligheter men utan de allvarliga begränsningarna.
PNG är, liksom GIF, en typ av icke-förstörande komprimering. Med andra ord kommer en bild som komprimeras som PNG att vara likadan som originalet efter dekomprimering. PNG fungerar bäst på bilder med stora, enfärgade områden. För att vara en icke-förstörande komprimering presterar den förhållandevis väl även på exempelvis fotografier, men kommer inte i närheten av den kompressionsgrad som kan uppnås med förstörande komprimering, exempelvis JPEG.
PNG kan använda upp till 48 bitar för att beskriva färg i formatet RGB. PNG har även stöd för en alfakanal för representation av transparens. I de fall det inte är lämpligt att beskriva varje pixels färg med RGB finns det möjlighet att använda en palett med upp till 256 färger.
Det finns även mer avancerad funktionalitet så som möjlighet till inbäddad ICC-profil och/eller möjlighet att definiera pixlarnas fysiska dimensioner.
PNG erbjuder ett flertal modeller för att representera en bild. Modellerna skiljer sig genom hur färgerna och den eventuella transparensen representeras. Modellerna är som följer.
Innan en bild kan kodas som en PNG-dataström måste ett antal transformationer utföras på ursprungsbilden.[1]
Processen att koda själva PNG-dataströmmen består av ett flertal steg. I varje steg utförs ett antal operationer på den matris av pixlar som ursprungsbilden består av. Dessa operationer resulterar i en PNG-dataström som kan sparas till fil eller skickas över önskat medium.
Bilden delas upp i ett flertal mindre delbilder även kallade reducerade bilder. Varje av dessa reducerade bilder motsvarar en grovkornig version av ursprungsbilden. Tanken är att ju fler reducerade bilder som innehas desto mer komplett blir bilden. Detta möjliggör att bilden kan börja visas innan hela bilden överförts, om än i en mindre detaljrik version. Under överföringsprocessen blir bilden progressivt mer detaljrik. Detta kan vara önskvärt vid till exempel visning av bilder på webben.
PNG-standarden definierar 2 metoder för pass extraction.
Varje rad i den reducerade bilden, en så kallad scanline, representeras av en sekvens av bytes.
För att göra den efterföljande komprimeringen mer effektiv appliceras på varje scanline i den reducerade bilden ett filter. Dessa filter transformerar datan på så sätt att den blir mer komprimerad men bibehåller möjligheten att återställa ursprungsdatan. Teorin är att minska mängden information i varje pixel genom att göra dem beroende på sina närliggande pixlar. PNG-standarden beskriver 5 typer av filter varav en innebär att ingen filtrering görs.
De olika filtreringstyperna beräknar för varje pixel ett nytt värde som får representera färgen i den pixeln. Detta görs genom att pixelns aktuella värde subtraheras med ett värde som fås genom manipulation av några närliggande pixlars värden. De olika filtreringstyperna skiljer sig genom vilka manipulationer som utförs samt vilka närliggande pixlar som används.
Filtreringstyperna ger varierande vinst vid komprimering beroende på hur originalbilden ser ut. För att öka effektiviteten tillåter PNG-standarden att olika filtertyper väljs på olika scanlines. Detta medför att filtreringstyp kan väljas med avseende på hur just den aktuella scanlinen och eventuellt också dess närliggande scanlines ser ut.
Resultatet av filtreringen är inte en mindre mängd data. Istället återfås scanlines med samma längd som tidigare, plus att varje scanline nu föregås av en byte som indikerar vilken av de olika filtreringstyperna som använts vid kodningen. Något som är nödvändigt att veta vid avkodningen. [2]
Alla scanlines slås ihop till en lång sekvens. Denna sekvens komprimeras med deflate-komprimering med den begränsningen att det glidande fönstret (en. sliding window) får som störst vara 32768 bytes. Den komprimerade dataströmmen är i formatet zlib.[3]
Vid styckningen (en. Chunking) skapas ett flertal så kallade stycken (en. chunks). Det är dessa stycken som bygger upp själva PNG-dataströmmen. Datan från föregående steg paketeras i IDAT-stycken. IHDR-stycke skapas med information om PNG-dataströmmen. Även ett IEND-stycke och eventuella underordnade stycken skapas.
PNG-standarden definierar ett flertal styckestyper. De erbjuder olika egenskaper som kan adderas till PNG-dataströmmen. Några av typerna är obligatoriska men de flesta är valfria. Det finns även möjlighet att definiera nya typer och på så sätt utöka PNG:s funktionalitet. Om funktionaliteten utökas på detta sätt krävs dock att både kodaren och avkodaren implementerar denna utökade funktionalitet.
Styckestyperna är indelade i två kategorier. De kritiska (stycken som är obligatoriska) och de underordnade vilka är valfria.
För att en PNG-dataström skall vara korrekt skall den inledas med en 8 byte stor signatur.
PNG-signaturen i decimal representation[4]
137 80 78 71 13 10 26 10
Signaturen skall efterföljas av ett IHDR-stycke följt av minst ett IDAT-stycke och avslutas med ett IEND-stycke. De eventuella underordnade styckena placeras enligt deras specifikation. Antingen före eller efter IDAT-styckena men aldrig utanför IHDR- och IEND-styckena.
Varje stycke består av 4 fält.[4]
De kritiska styckena är vitala för att överhuvudtaget kunna visa en bild. Alla applikationer som använder PNG måste implementera rutiner för att tolka åtminstone dessa stycken.
Det första stycket i en PNG-dataström. Här finns information om bildens storlek, färgdjup och vilka metoder som använts i de olika kodningsstegen.
IHDR styckestyp i decimal representation.[5]
73 72 68 82
IHDR datafält innehåller följande fält.[6]
Innehåller den komprimerade bilddatan. En PNG-dataström kan innehålla ett flertal efter varandra följande IDAT-stycken. Storleken på IDAT-styckena är upp till kodaren att avgöra. De kan vara allt från 0 byte och uppåt.
IDAT styckestyp i decimal representation.[7]
73 68 65 84
PLTE-stycket innehåller bildens palett. En palett består av 1–256 färgvärden ordnade från 0 till 255. Dessa färgvärden refereras sedan från en eller flera pixlar i bilden. Varje färgvärde beskriver en färg med 8 bitars djup, detta oavsett vilket färgdjup som användes vid kodningen av bilden.
PLTE-stycket är endast nödvändigt för bilder vars färg beskrivs av en palett men även bilder i RGB kan ha ett PLTE-stycke. För bilder vars färg är beskriven med RGB används PLTE-stycket som ett alternativ för enheter eller applikationer som inte kan visa det stora antal färger som RGB erbjuder.
PLTE styckestyp i decimal representation.[8]
80 76 84 69
Stycke som markerar slutet på en PNG-dataström. Datafältet på IEND-stycket är tomt.
IEND styckestyp i decimal representation.[9]
73 69 78 68
De underordnade styckena tillför extra funktionalitet till bilden. Exempel på detta kan vara ICC-profil eller pixlarnas fysiska mått. Det är inte nödvändigt att applikationen som använder PNG skall kunna tolka dessa stycken. Oförmåga att tolka de underordnade styckena kan dock medföra att bilden inte visas som avsett.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.