JPEG File Interchange Format

JPEG File Interchange Format ( JFIF ) är en standard för bildfilformat publicerad som ITU-T Recommendation T.871 och ISO/IEC 10918-5. Den definierar kompletterande specifikationer för behållarformatet som innehåller bilddata kodad med JPEG- algoritmen. Grundspecifikationerna för ett JPEG-behållarformat definieras i bilaga B till JPEG-standarden, känd som JPEG Interchange Format (JIF). JFIF bygger över JIF för att lösa några av JIF:s begränsningar, inklusive onödig komplexitet, komponentprovregistrering, upplösning, bildförhållande och färgrymd . Eftersom JFIF inte är den ursprungliga JPG-standarden, kan man förvänta sig en annan mime-typ. Det är dock fortfarande registrerat som "image/jpeg" (indikerar dess primära dataformat snarare än den ändrade informationen).

JFIF är ömsesidigt inkompatibelt med det nyare utbytbara bildfilformatet ( Exif).

Syfte

JFIF definierar ett antal detaljer som lämnas ospecificerade av JPEG Part 1-standarden ( ISO / IEC 10918-1, ITU-T- rekommendation T.81.)

Komponentprovsregistrering

JPEG tillåter att flera komponenter (som Y, Cb och Cr ) har olika upplösningar, men det definierar inte hur de olika sampelmatriserna (som återger bitmappar) ska justeras. Denna pixelproducerande information återges med förväntan att indikera rektanglar med deras centeroid, snarare än att vara pixeldata direkt, eller vara "första hörnet och översvämning", etc. vilket är ovanligt.

Upplösning och bildförhållande

JPEG-standarden inkluderar inte någon metod för att koda en bilds upplösning eller bildförhållande. JFIF tillhandahåller information om upplösning eller bildförhållande med ett programsegmenttillägg till JPEG. Den använder applikationssegment #0, med en segmenthuvud som består av den nollterminerade strängstavningen "JFIF" i ASCII följt av en byte lika med 0, och anger att detta måste vara det första segmentet i filen, vilket gör det enkelt att känner igen en JFIF-fil. Exif- bilder inspelade med digitalkameror inkluderar i allmänhet inte detta segment, men uppfyller vanligtvis i alla andra avseenden JFIF-standarden.

Färg rymd

JPEG-standarden som används för komprimeringskodning i JFIF-filer definierar inte vilken färgkodning som ska användas för bilder. JFIF definierar färgmodellen som ska användas: antingen Y för gråskala, eller YCbCr härledd från RGB-färgprimärer enligt definitionen i CCIR 601 (nu känd som Rec. ITU-R BT.601), förutom med en annan "full range"-skalning av Y-, Cb- och Cr-komponenterna. Till skillnad från "studiointervallet" som definieras i CCIR 601, där svart representeras av Y=16 och vitt av Y=235 och värden utanför detta intervall är tillgängliga för signalbehandling "headroom" och "footroom", använder JFIF alla 256 nivåer av 8-bitars representationen, så att Y=0 för svart och Y=255 för toppvit. RGB-färgprimärerna som definieras i JFIF via CCIR 601 skiljer sig också något från vad som har blivit vanligt i nyare applikationer (t.ex. skiljer de sig något från färgprimärerna definierade i sRGB ). Dessutom gav CCIR 601 (före 2007) ingen exakt definition av RGB-färgprimärerna; den förlitade sig istället på tv-branschens underliggande praxis.

Färgtolkningen av en JFIF-bild kan förbättras genom att bädda in en ICC- profil, färgrymdsmetadata eller en sRGB- tagg och använda ett program som tolkar denna information.

Filformatstruktur

En JFIF-fil består av en sekvens av markörer eller markörsegment (för detaljer se JPEG, Syntax och struktur ) . Markörerna definieras i del 1 av JPEG -standarden. Varje markör består av två byte: en FF- byte följt av en byte som inte är lika med 00 eller FF och anger typen av markör. Vissa markörer står ensamma, men de flesta indikerar början på ett markörsegment som innehåller databytes enligt följande mönster:

FF xx s1 s2 [databyte]

Byte s1 och s2 tas tillsammans för att representera ett big-endian 16-bitars heltal som specificerar längden på följande "databyte" plus de 2 byte som används för att representera längden. Med andra ord s1 och s2 antalet av följande databytes som .

Enligt del 1 av JPEG-standarden kan applikationer använda APP-markörsegment och definiera en applikationsspecifik betydelse för data. I JFIF-standarden definieras följande APP-markörsegment:

  • JFIF APP0 markörsegment (JFIF-segment för kort) (obligatoriskt)
  • JFIF extension APP0 markörsegment (JFXX segment för kort) (valfritt)

De beskrivs nedan.

JFIF-standarden kräver att JFIF APP0-markörsegmentet omedelbart följer SOI-markören. Om ett JFIF extension APP0 markörsegment används måste det omedelbart följa JFIF APP0 markörsegmentet. Så en JFIF-fil kommer att ha följande struktur:

JFIF-filstruktur
Segmentet Koda Beskrivning
SÅ JAG FF D8 Bildens början
JFIF-APP0 FF E0 s1 s2 4A 46 49 46 00 ... se nedan
JFXX-APP0 FF E0 s1 s2 4A 46 58 58 00 ... valfritt, se nedan

… ytterligare markörsegment (till exempel SOF, DHT, COM)
SOS FF DA Start av skanning
komprimerade bilddata
EOI FF D9 Slut på bilden

JFIF APP0 markörsegment

I det obligatoriska JFIF APP0-markörsegmentet anges parametrarna för bilden. Eventuellt kan en okomprimerad miniatyr bäddas in.

JFIF APP0 markörsegment
Fält Storlek (byte) Beskrivning
APP0 markör 2 FF E0
Längd 2 Segmentets längd exklusive APP0-markör
Identifierare 5 4A 46 49 46 00 = "JFIF" i ASCII , avslutad med en nollbyte
JFIF version 2 Första byten för huvudversion, andra byte för mindre version ( 01 02 för 1.02)
Densitetsenheter 1 Enheter för följande pixeltäthetsfält
  • 00 : Inga enheter; bredd:höjd pixel bildförhållande = Ydensity:Xdensity
  • 01 : Pixlar per tum (2,54 cm)
  • 02 : Pixlar per centimeter
Xdensitet 2 Horisontell pixeltäthet. Får inte vara noll
Ydensitet 2 Vertikal pixeltäthet. Får inte vara noll
Xthumbnail 1 Horisontellt antal pixlar för följande inbäddade RGB-miniatyrbild. Kan vara noll
Ythumbnail 1 Antal vertikala pixlar för följande inbäddade RGB-miniatyrbild. Kan vara noll
Miniatyrbildsdata 3 × n Okomprimerad 24 bitars RGB (8 bitar per färgkanal) rasterminiatyrdata i ordningen R0, G0, B0, ... Rn-1, Gn-1, Bn-1; med n = Xthumbnail × Ythumbnail

JFIF extension APP0 markörsegment

Omedelbart efter JFIF APP0-markörsegmentet kan ett JFIF-förlängnings-APP0-markörsegment. Det här segmentet kan endast finnas för JFIF version 1.02 och senare. Det gör det möjligt att bädda in en miniatyrbild i 3 olika format.

JFIF extension APP0 markörsegment
Fält Storlek (byte) Beskrivning
APP0 markör 2 FF E0
Längd 2 Segmentets längd exklusive APP0-markör
Identifierare 5 4A 46 58 58 00 = "JFXX" i ASCII , avslutad med en nollbyte
Miniatyrformat 1 Anger vilket dataformat som används för följande inbäddade miniatyr:
  • 10 : JPEG-format
  • 11 : 1 byte per pixel palettformat
  • 13 : 3 byte per pixel RGB-format
Miniatyrbildsdata variabel Beror på miniatyrformatet, se nedan

Miniatyrbildsdata beror på miniatyrformatet enligt följande:

Miniatyren lagrad med JPEG-kodning
Fält Storlek (byte) Beskrivning
SÅ JAG 2 FF D8
variabel Måste vara JIF-format med YCbCr eller bara Y, och får inte innehålla JFIF- eller JFXX-segment
EOI 2 FF D9
Miniatyren lagras med en byte per pixel
Fält Storlek (byte) Beskrivning
Xthumbnail 1 Horisontellt antal pixlar för följande inbäddade miniatyrbild. Får inte vara noll
Ythumbnail 1 Antal vertikala pixlar för följande inbäddade miniatyrbild. Får inte vara noll
Miniatyrbildspalett 768 256 palettposter, som var och en innehåller ett 24 bitars RGB-färgvärde
Miniatyrbildsdata n En byte per pixel som innehåller indexet för färgen i paletten,

med n = Xthumbnail × Ythumbnail

Miniatyren lagrad med tre byte per pixel
Fält Storlek (byte) Beskrivning
Xthumbnail 1 Horisontellt antal pixlar för följande inbäddade miniatyrbild. Får inte vara noll
Ythumbnail 1 Antal vertikala pixlar för följande inbäddade miniatyrbild. Får inte vara noll
Miniatyrbildsdata 3 × n Okomprimerad 24 bitars RGB (8 bitar per färgkanal) rasterminiatyrdata i ordningen R0, G0, B0, ... Rn-1, Gn-1, Bn-1; med n = Xthumbnail × Ythumbnail

Kompatibilitet

Det nyare Exchangeable image-filformatet (Exif) är jämförbart med JFIF, men de två standarderna är ömsesidigt inkompatibla. Detta beror på att båda standarderna anger att deras specifika applikationssegment (APP0 för JFIF, APP1 för Exif) omedelbart måste följa SOI-markören. I praktiken producerar många program och digitalkameror filer med båda applikationssegmenten inkluderade. Detta kommer inte att påverka bildavkodningen för de flesta avkodare, men dåligt utformade JFIF- eller Exif-parsrar kanske inte känner igen filen ordentligt.

JFIF är kompatibelt med Adobe Photoshops JPEG "Information Resource Block"-tillägg och IPTC Information Interchange Model- metadata, eftersom JFIF inte utesluter andra programsegment och Photoshop-tilläggen behöver inte vara de första i filen. Men Photoshop sparar i allmänhet CMYK-buffertar som fyra-komponent "Adobe JPEG" som inte överensstämmer med JFIF. Eftersom dessa filer inte finns i en YCbCr-färgrymd är de vanligtvis inte avkodningsbara av webbläsare och annan Internetprogramvara.

Historia

Utvecklingen av JFIF-dokumentet leddes av Eric Hamilton från C-Cube Microsystems , och en överenskommelse om den första versionen etablerades i slutet av 1991 vid ett möte som hölls på C-Cube med ett 40-tal representanter för olika dator-, telekommunikations- och bildföretag. Kort därefter publicerades en mindre revidering — JFIF 1.01. I nästan 20 år var den senaste tillgängliga versionen v1.02, publicerad 1 september 1992.

1996 specificerade RFC 2046 att bildformatet som används för att överföra JPEG-bilder över Internet skulle vara JFIF. MIME -typen "image/jpeg" måste kodas som JFIF. I praktiken kan dock praktiskt taget all Internetprogramvara avkoda vilken baslinje JIF- bild som helst som använder Y- eller YCbCr-komponenter, oavsett om den är JFIF-kompatibel eller inte.

Allteftersom tiden gick omstrukturerades C-Cube (och så småningom delegerades till Harmonic , LSI Logic , Magnum Semiconductor , Avago Technologies , Broadcom och GigOptix, GigPeak, etc), och tappade intresset för dokumentet, och specifikationen hade ingen officiell utgivare tills det plockades upp av Ecma International och ITU-T/ISO/IEC Joint Photographic Experts Group runt 2009 för att undvika att det går förlorat i historien och ge ett sätt att formellt citera det i standardpublikationer och förbättra dess redaktionella kvalitet. Den publicerades av ECMA 2009 som teknisk rapport nummer 98 för att undvika förlust av det historiska rekordet, och den standardiserades formellt av ITU-T 2011 som dess rekommendation T.871 och av ISO/IEC 2013 som ISO/IEC 10918- 5, De nyare publikationerna innehöll redaktionella förbättringar men inga väsentliga tekniska ändringar.

Se även

Vidare läsning

Böcker

Standarder