aspose.info
CS

Formát souboru FLIF

Aktualizováno

Co je soubor FLIF?

FLIF (Free Lossless Image Format) je bezztrátový formát obrázků, který pro své soubory používá příponu .flif. FLIF tvrdí, že překonává PNG, bezztrátové WebP, bezztrátové BPG a bezztrátové JPEG 2000 z hlediska kompresního poměru. FLIF používá progresivní prokládání, díky kterému lze jakékoli částečné stažení obrázku použít jako ztrátové kódování pro celý obrázek.

Stručná historie

FLIF byl oznámen v září 2015 a alfa verze byla vydána v říjnu 2015. V září 2016 byla vydána první stabilní verze FLIF.

Design FLIF

FLIF používá pro kompresi variantu CABAC (Kontextově adaptivní binární aritmetické kódování), MANIAC (Meta-Adaptivní Near-zero Integer Arithmetic Coding). MANIAC je entropický kódovací algoritmus vyvinutý Jonem Sneyersem a Pieterem Wuillem. V MANIAC jsou kontexty uzly rozhodovacích stromů, které se dynamicky učí v době kódování. Díky tomu je kontextový model více specifický pro obrázky a výsledkem je lepší komprese. FLIF má následující vlastnosti:

  • Podporuje bezeztrátovou kompresi
  • Podporuje ztrátovou kompresi s předzpracováním kodéru
  • Podporuje stupně šedi, RGB a RGBA
  • Podporuje barevnou hloubku 1 až 16 bitů na kanál
  • Podporuje prokládané a neprokládané soubory
  • Podporuje progresivní dekódování částečně stažených souborů
  • Podporuje animace
  • Podporuje vložené profily barev ICC, metadata Exif a XMP
  • Má omezenou podporu pro kompresi souborů camera raw (RGGB)

Formát souboru FLIF

Soubor FLIF má následující čtyři části:

Hlavní záhlaví

Hlavní záhlaví obsahuje hlavní metadata včetně šířky, výšky, barevné hloubky, počtu snímků.

TypHodnotaPopis
4 bajty“FLIF”Kouzlo
4 bity3 = ni stále; 4 = i stále; 5 = ni anim; 6 = i animProkládání, animace
4 bity1 = stupně šedi; 3 = RGB; 4 = RGBAPočet kanálů (nb_channels)
1 bajt‘0’,‘1’,‘2’ (‘0’=vlastní)Bajty na kanál (Bpc)
varintšířka-1šířka
varintvýška-1Výška
varintnb_frames-2 (pouze v případě animace)Počet snímků (nb_frames)

Části metadat

Tato část obsahuje nepixelová metadata, jako jsou Exif/XMP metadata, barevný profil ICC atd., která jsou kódována pomocí komprese DEFLATE. Tyto bloky jsou definovány podobně jako bloky PNG s tím rozdílem, že velikost sklíčidla je kódována proměnným počtem bajtů. Názvy bloků mohou mít 4 písmena (4 bajty) nebo hodnotu nižší než 32 označující nepovinný blok.

Následuje příklad volitelných sklíčidel:

Název blokuPopisObsah (po dekompresi DEFLATE)
iCCPprofil barev ICCsurová data barevného profilu ICC
eXifExif metadata“Exif\0\0” hlavička následovaná hlavičkou TIFF a EXIF data
eXmpXMP metadataXMP obsažená v xpacketu pouze pro čtení bez odsazení

Konvence pojmenování

  • První písmeno: Velká písmena se používají pro kritické a malá písmena pro nekritické části.
  • Druhé písmeno: Velká písmena se používají pro veřejné a malá písmena pro soukromé části
  • Třetí písmeno: Velká písmena se používají pro sklíčidla, která jsou potřebná pro správné zobrazení obrázku a malá písmena nejsou pro zobrazení obrázku důležitá.
  • Čtvrté písmeno: Velká písmena se používají pro sklíčidla, která lze bezpečně kopírovat naslepo. Sklíčidla s malými písmeny závisí na obrazových datech.

Druhé záhlaví

To obsahuje informace týkající se skutečného kódování pixelů.

TypPopisPodmínkaVýchozí hodnota
1 bytebajt NUL (0x00), název bloku bitového toku FLIF16
uni_int(1,16)Bity na pixel kanálůBpc == ‘0’: repeat(nb_channels)8, pokud Bpc == ‘1’, 16, pokud Bpc == ‘2’
uni_int(0,1)Příznak: alpha_zeronb_channels > 30
uni_int(0,100)Počet smyčeknb_frames > 1
uni_int(0,60_000)Zpoždění snímků v msnb_frames > 1: repeat(nb_frames)
uni_int(0,1)Příznak: has_custom_cutoff_and_alpha
uni_int(1,128)cutoffhas_custom_cutoff_and_alpha2
uni_int(2,128)dělitel alfahas_custom_cutoff_and_alpha19
uni_int(0,1)Příznak: has_custom_bitchancehas_custom_cutoff_and_alpha0
?Bitchancehas_custom_bitchance
proměnnáTransformace (viz níže)
uni_int(1) = 0Indikační bit: hotovo s transformacemi
uni_int(0,2)Prediktor neviditelných pixelůalpha_zero && prokládaný && rozsah alfa zahrnuje nulu

Kanály

Číslo kanáluPopis
0Červená nebo šedá
1Zelená
2Modrá
3Alfa

Proměny

TypPopis
uni_int(1) = 1Indikační bit: ještě není hotovo
uni_int(0,13)Identifikátor transformace
proměnnáData transformace (závisí na transformaci)

Transformace se používá k úpravě dat pixelů pro lepší kompresi a ke sledování skutečně se vyskytujících hodnot pixelů.

Pixelová data

Tato část obsahuje aktuální pixelová data zakódovaná pomocí kódování entropie MANIAC. Pixely mohou být kódovány pomocí prokládaného nebo neprokládaného kódování.

Prokládaná metoda

V této metodě jsou definovány úrovně přiblížení. Úroveň přiblížení 0 se používá pro celý obrázek, úroveň přiblížení 1 se používá pro všechny sudé řádky, úroveň přiblížení 2 se používá pro všechny sloupce úrovně přiblížení 1. Jinými slovy, každá úroveň přiblížení se sudým číslem 2k je převzorkovaná verze obrázek v měřítku 1:2^k. Úrovně přiblížení jsou kódovány od nejvyšší po nejnižší.

Neprokládaná metoda

V této metodě začíná kódování stromů MANIAC bezprostředně následované kódováním pixelů.

Reference

Viz také