aspose.info
DA

FLIF fil formularat

Opdateret

Hvad er en FLIF fil?

FLIF (Free Lossless Image Format) er et tabsfrit billedformat, der bruger filtypenavnet .flif til sine filer. FLIF hævder at overgå PNG, tabsfri WebP, tabsfri BPG og tabsfri JPEG 2000 med hensyn til kompressionsforhold. FLIF bruger progressiv interlacing, på grund af hvilken enhver delvis download af billedet kan bruges som en tabsgivende kodning for hele billedet.

Kort historie

FLIF was announced in September 2015, and the alpha version was released in October 2015. I september 2016 blev den første stabile version af FLIF udgivet.

FLIF Design

FLIF bruger en variant af CABAC (Context-adaptive binary aritmetic coding), MANIAC (Meta-Adaptive Near-zero Integer Arithmetic Coding) til komprimering. MANIAC er en entropikodningsalgoritme udviklet af Jon Sneyers og Pieter Wuille. I MANIAC er sammenhængene noder af beslutningstræer, der læres dynamisk ved indkodningstid. Dette gør kontekstmodellen mere billedspecifik og resulterer i en bedre komprimering. FLIF har følgende funktioner:

  • Understøtter tabsfri kompression
  • Understøtter tabsgivende komprimering med encoder-forbehandling
  • Understøtter gråtoner, RGB og RGBA
  • Understøtter farvedybde på 1 til 16 bit pr. kanal
  • Understøtter sammenflettede og ikke-sammenflettede filer
  • Understøtter progressiv afkodning af delvist downloadede filer
  • Understøtter animationer
  • Understøtter indlejrede ICC-farveprofiler, Exif- og XMP-metadata
  • Har begrænset understøttelse af komprimering af Camera Raw-filer (RGGB)

FLIF filformat

En FLIF-fil har følgende fire dele:

Hovedoverskrift

Hovedhovedet indeholder de vigtigste metadata inklusive bredde, højde, farvedybde, antal rammer.

TypeVærdiBeskrivelse
4 bytesFLIFMagic
4 bit3 = ni stadig; 4 = i stadig; 5 = ni dyr; 6 = i animInterlacing, animation
4 bit1 = Gråtoner; 3 = RGB; 4 = RGBAAntal kanaler (nb_kanaler)
1 byte‘0’,‘1’,‘2’ (‘0’=custom)Bytes pr. kanal (Bpc)
varintwidth-1Bredde
varinthøjde-1Højde
varintnb_frames-2 (kun hvis animation)Antal rammer (nb_frames)

Metadata bidder

Denne del indeholder ikke-pixel som Exif/XMP-metadata, ICC-farveprofil osv., der er kodet ved hjælp af DEFLATE-komprimering. Disse chunks er defineret på samme måde som PNG chunks med forskellen, at chuckstørrelsen er kodet med et variabelt antal bytes. Chunks’ navne kan være på 4 bogstaver (4 bytes) eller en værdi under 32, hvilket indikerer en ikke-valgfri chunk.

Følgende er et eksempel på valgfri spændepatroner:

KunknavnBeskrivelseIndhold (efter DEFLATE-dekompression)
iCCPICC farveprofilrå ICC farveprofildata
eXifExif-metadataExif\0\0-header efterfulgt af en TIFF-header og EXIF-data
eXmpXMP-metadataXMP indeholdt i en skrivebeskyttet x-pakke uden udfyldning
  • Første bogstav: Store bogstaver bruges til kritiske og små bogstaver bruges til ikke-kritiske bidder.
  • Andet bogstav: Store bogstaver bruges til offentlige og små bogstaver bruges til private bidder
  • Tredje bogstav: Store bogstaver bruges til patroner, der er nødvendige for at vise billedet korrekt, og små bogstaver er ikke vigtige for at vise billedet.
  • Fjerde bogstav: Store bogstaver bruges til patroner, der sikkert kan kopieres blindt. Små patroner afhænger af billeddataene.

Anden overskrift

Dette indeholder oplysninger om den faktiske kodning af pixels.

TypeBeskrivelseBetingelseStandardværdi
1 byteNUL byte (0x00), delnavn på en FLIF16 bitstream
uni_int(1,16)Bits pr. pixel af kanalerneBpc == ‘0’: repeat(nb_channels)8 hvis Bpc == ‘1’, 16 hvis Bpc == ‘2’
uni_int(0,1)Flag: alpha_zeronb_kanaler > 30
uni_int(0,100)Antal sløjfernb_frames > 1
uni_int(0,60_000)Frame forsinkelse i msnb_frames > 1: repeat(nb_frames)
uni_int(0,1)Flag: has_custom_cutoff_and_alpha
uni_int(1.128)cutoffhar_tilpasset_cutoff_and_alpha2
uni_int(2.128)alfa divisorhar_tilpasset_afskæring_og_alfa19
uni_int(0,1)Flag: has_custom_bitchancehas_custom_cutoff_and_alpha0
?Bitchancehar_tilpasset_bitchance
variabelTransformationer (se nedenfor)
uni_int(1) = 0Indikatorbit: udført med transformationer
uni_int(0,2)Usynlig pixel forudsigelsealpha_zero && interlaced && alpha range inkluderer nul

Kanaler

KanalnummerBeskrivelse
0Rød eller Grå
1Grøn
2Blå
3Alfa

Transformationer

TypeBeskrivelse
uni_int(1) = 1Indikatorbit: ikke udført endnu
uni_int(0,13)Transformationsidentifikator
variabelTransformationsdata (afhænger af transformation)

Transformation bruges til at ændre pixeldata for bedre komprimering og til at holde styr på faktisk forekommende pixelværdier.

Pixeldata

Denne del indeholder de faktiske pixeldata, der er kodet ved hjælp af MANIAC entropikodning. Pixels kan være kodet ved hjælp af interlaced eller ikke-interlaced kodning.

Interlaced metode

In this method, zoomlevels are defined. Zoomlevel 0 is used for the full image, zoomlevel 1 is used for all even-numbered rows, zoomlevel 2 is used for all even-numbered columns of zoomlevel 1. Med andre ord er hvert lige nummererede zoomniveau 2k en downsamplet version af billedet i skala 1:2^k. Zoomniveauer er kodet fra det højeste til det laveste.

Ikke-sammenflettet metode

I denne metode begynder kodningen af MANIAC-træerne umiddelbart efterfulgt af kodningen af pixels.

Referencer

Se også