Hva er en JPEG-fil?
En JPEG er en type bildeformat som lagres ved hjelp av tapskomprimeringsmetoden. Utdatabildet, som et resultat av komprimering, er en avveining mellom lagringsstørrelse og bildekvalitet. Brukere kan justere komprimeringsnivået for å oppnå ønsket kvalitetsnivå og samtidig redusere lagringsstørrelsen. Bildekvaliteten påvirkes ubetydelig hvis 10:1-komprimering brukes på bildet. Jo høyere komprimeringsverdi, desto høyere forringelse i bildekvalitet.
Filformatspesifikasjoner
JPEG-bildefilformatet ble standardisert av Joint Photographic Experts Group og derav navnet JPEG. Formatet har vært valget mellom lagring og overføring av fotografiske bilder på nettet. Nesten alle operativsystemer har nå seere som støtter visualisering av JPEG-bilder, som ofte også lagres med JPG-utvidelse. Selv nettleserne støtter visualisering av JPEG-bilder. Før du går inn i JPEG-filformatspesifikasjonene, må den generelle prosessen med trinnene som er involvert i JPEG-oppretting nevnes.
JPEG-komprimeringstrinn
Transformasjon: Fargebilder transformeres fra RGB til et luminans-/krominansbilde (Øyet er følsomt for luminans, ikke krominans, slik at krominansdelen kan miste mye data og dermed bli svært komprimert.
Nedsampling: Nedsamplingen gjøres for farget komponent og ikke for luminanskomponenten. Nedsamplingen utføres enten i forholdet 2:1 horisontalt og 1:1 vertikalt (2t 1 V). Dermed reduseres bildet i størrelse siden ‘y’-komponenten ikke berøres, det er ikke noe merkbart tap av bildekvalitet.
Organisering i grupper: Pikslene til hver fargekomponent er organisert i grupper på 8×2 piksler kalt “dataenheter” hvis antall rader eller kolonner ikke er et multiplum av 8, er den nederste raden og kolonnene lengst til høyre duplisert.
Diskret kosinustransformasjon: Diskret kosinustransformasjon (DCT) brukes deretter på hver dataenhet for å lage 8×8 kart over transformerte komponenter. DCT innebærer noe tap av informasjon på grunn av den begrensede presisjonen til datamaskinaritmetikk. Dette betyr at selv uten kartet vil det være noe tap av bildekvalitet, men det er normalt lite.
Kvantisering: Hver av de 64 transformerte komponentene i dataenheten er delt med et separat tall som kalles dens ‘Quantization Coefficient (QC)’ og deretter avrundet til et heltall. Det er her informasjon går tapt uopprettelig, store kvalitetskontroller forårsaker mer tap. Generelt tillater de fleste JPEG-verktøy bruk QC-tabeller anbefalt av JPEG-standarden.
Koding: De 64 kvantiserte transformerte koeffisientene (som nå er heltall) for hver dataenhet er kodet ved hjelp av en kombinasjon av RLE- og Huffman-koding.
Legg til topptekst: Det siste trinnet legger til overskrift og alle JPEG-parameterne som brukes, og viser resultatet.
JPEG-dekoderen bruker trinnene i revers for å generere det originale bildet fra det komprimerte.
Filstruktur
Et JPEG-bilde er representert som en sekvens av segmenter der hvert segment begynner med en markør. Hver markør starter med 0xFF byte etterfulgt av markørflagg for å representere typen markør. Nyttelasten etterfulgt av markør er forskjellig avhengig av markørtype. Vanlige JPEG-markørtyper er som oppført nedenfor:
Short Name | Bytes | Payload | Name | Comments |
---|---|---|---|---|
SOI | 0xFF, 0xD8 | none | Start of Image | |
S0F0 | 0xFF, 0xC0 | variable size | Start of Frame | |
S0F2 | 0xFF, 0xC2 | variable size | Start fo Frame | |
DHT | 0xFF, 0xC4 | variable size | Define Huffman Tables | |
DQT | 0xFF, 0xDB | variable size | Define Quantization Table(s) | |
DRI | 0xFF, 0xDD | 4 bytes | Define Restart Interval | |
SOS | 0xFF, 0xDA | variable size | Start Of Scan | |
RSTn | 0xFF, 0xD//n//(//n//#0..7) | none | Restart | |
APPn | 0xFF, 0xE//n// | variable size | Application specific | |
COM | 0xFF, 0xFE | variable size | Comment | |
EOI | 0xFF, 0xD9 | none | End Of Image |
Innenfor de entropikodede dataene, etter en hvilken som helst 0xFF-byte, settes en 0x00-byte inn av koderen før neste byte, slik at det ikke ser ut til å være en markør der ingen er ment, og forhindrer rammefeil. Dekodere må hoppe over denne 0x00 byten. Denne teknikken, kalt byte stuffing (se JPEG-spesifikasjonsdelen F.1.2.3), brukes bare på de entropikodede dataene, ikke på markørdata for nyttelast . Vær imidlertid oppmerksom på at entropikodede data har noen få egne markører; spesifikt tilbakestillingsmarkørene (0xD0 til 0xD7), som brukes til å isolere uavhengige biter av entropikodede data for å tillate parallell dekoding, og kodere står fritt til å sette inn disse tilbakestillingsmarkørene med jevne mellomrom (selv om ikke alle kodere gjør dette).