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
|
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:
|
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
- Miano, John M, "Komprimerade bildfilformat"; 1999, Addison-Wesley ISBN 978-0-201-60443-6
- Pennebaker, William B. och Joan L. Mitchell : JPEG-standard för komprimering av stillbildsdata ; 3:e upplagan, 1993, Springer ISBN 978-0-442-01272-4
Standarder
- Hamilton, Eric: JPEG File Interchange Format, version 1.02 (PDF, 0,02 MB) 1 september 1992
- Rekommendation ITU-T T.871: Informationsteknologi – Digital komprimering och kodning av stillbilder med kontinuerliga toner: JPEG File Interchange Format (JFIF) (PDF och Microsoft Word, 0,2 MB) Godkänd 14 maj 2011; publicerad 11 september 2012
- Rekommendation ITU-T T.81: Informationsteknologi – Digital komprimering och kodning av stillbilder med kontinuerliga toner – Krav och riktlinjer (PDF och Microsoft Word, 1,5 MB) Godkänd 18 september 1992; publicerad 14 april 2004