aspose.info
BG

FLIF файлов формат

Обновено

Какво е FLIF файл?

FLIF (Free Lossless Image Format) е формат на изображение без загуби, който използва разширението .flif за своите файлове. FLIF твърди, че превъзхожда PNG, WebP, BPG без загуби и JPEG 2000 без загуби по отношение на степента на компресия. FLIF използва прогресивно преплитане, поради което всяко частично изтегляне на изображението може да се използва като кодиране със загуби за цялото изображение.

Кратка история

FLIF беше обявен през септември 2015 г., а алфа версията беше пусната през октомври 2015 г. През септември 2016 г. беше пусната първата стабилна версия на FLIF.

FLIF дизайн

FLIF използва вариант на CABAC (контекстно-адаптивно двоично аритметично кодиране), MANIAC (мета-адаптивно почти нулево целочислено аритметично кодиране) за компресиране. MANIAC е алгоритъм за ентропийно кодиране, разработен от Jon Sneyers и Pieter Wuille. В MANIAC контекстите са възли на дървета на решения, които се научават динамично по време на кодиране. Това прави контекстния модел по-специфичен за изображението и води до по-добра компресия. FLIF има следните характеристики:

  • Поддържа компресия без загуби
  • Поддържа компресия със загуби с предварителна обработка на енкодер
  • Поддържа сива скала, RGB и RGBA
  • Поддържа дълбочина на цвета от 1 до 16 бита на канал
  • Поддържа презредови и непреплетени файлове
  • Поддържа прогресивно декодиране на частично изтеглени файлове
  • Поддържа анимации
  • Поддържа вградени ICC цветови профили, Exif и XMP метаданни
  • Има ограничена поддръжка за компресиране на необработени файлове на камерата (RGGB)

FLIF файлов формат

FLIF файлът има следните четири части:

Главен колонтитул

Основният хедър съдържа основните метаданни, включително ширина, височина, дълбочина на цвета, брой кадри.

ТипСтойностОписание
4 байта“FLIF”Magic
4 бита3 = ni неподвижно; 4 = аз все още; 5 = ni anim; 6 = i animПреплитане, анимация
4 бита1 = Нива на сивото; 3 = RGB; 4 = RGBAБрой канали (nb_канали)
1 байт‘0’,‘1’,‘2’ (‘0’=персонализиран)Байтове на канал (Bpc)
varintwidth-1Width
varintheight-1Височина
varintnb_frames-2 (само ако анимация)Брой кадри (nb_frames)

Части метаданни

Тази част съдържа метаданни без пиксели, като Exif/XMP, ICC цветови профил и т.н., които са кодирани с помощта на компресия DEFLATE. Тези части се дефинират подобно на PNG частите с разликата, че размерът на патронника е кодиран с променлив брой байтове. Имената на парчетата могат да бъдат 4 букви (4 байта) или стойност под 32, указваща незадължителна част.

Следното е пример за незадължителни патронници:

Име на частОписаниеСъдържание (след DEFLATE-декомпресия)
iCCPICC цветен профилсурови данни за ICC цветен профил
eXifExif метаданниЗаглавка “Exif\0\0”, последвана от заглавка TIFF и EXIF данните
eXmpXMP метаданниXMP, съдържащ се в xpacket само за четене без подплата

Конвенция за именуване

  • Първа буква: Главни букви се използват за критични, а малки букви се използват за некритични парчета.
  • Втора буква: Главни букви се използват за публични, а малки букви се използват за частни парчета
  • Трета буква: Главни букви се използват за патрони, които са необходими за правилното показване на изображението, а малките букви не са важни за показване на изображението.
  • Четвърта буква: Главни букви се използват за патрони, които могат безопасно да се копират на сляпо. Патронниците с малки букви зависят от данните за изображението.

Второ заглавие

Това съдържа информация относно действителното кодиране на пикселите.

ТипОписаниеСъстояниеСтойност по подразбиране
1 байтNUL байт (0x00), име на част от битов поток FLIF16
uni_int(1,16)Битове на пиксел от каналитеBpc == ‘0’: повторение(nb_channels)8 ако Bpc == ‘1’, 16 ако Bpc == ‘2’
uni_int(0,1)Флаг: alpha_zeronb_channels > 30
uni_int(0,100)Брой циклиnb_frames > 1
uni_int(0,60_000)Закъснение на кадър в msnb_frames > 1: повторение(nb_frames)
uni_int(0,1)Флаг: has_custom_cutoff_and_alpha
uni_int(1,128)срязванеима_персонализирано_срязване_и_алфа2
uni_int(2,128)алфа делителhas_custom_cutoff_and_alpha19
uni_int(0,1)Флаг: has_custom_bitchancehas_custom_cutoff_and_alpha0
?Bitchancehas_custom_bitchance
променливаТрансформации (вижте по-долу)
uni_int(1) = 0Индикаторен бит: готов с трансформации
uni_int(0,2)Невидим пикселен предсказателalpha_zero && преплетен && алфа диапазон включва нула

Канали

Номер на каналаОписание
0Червено или сиво
1Зелено
2Синьо
3Алфа

Трансформации

ТипОписание
uni_int(1) = 1Индикаторен бит: все още не е направено
uni_int(0,13)Идентификатор на трансформация
променливаДанни за трансформация (зависи от трансформацията)

Трансформацията се използва за модифициране на пикселните данни за по-добро компресиране и за проследяване на действително възникващите пикселни стойности.

Пикселни данни

Тази част съдържа действителните пикселни данни, кодирани с помощта на ентропийно кодиране на MANIAC. Пикселите могат да бъдат кодирани с помощта на презредово или непреплетено кодиране.

Преплетен метод

При този метод се дефинират нива на мащабиране. Zoomlevel 0 се използва за цялото изображение, zoomlevel 1 се използва за всички четни редове, zoomlevel 2 се използва за всички четни колони от zoomlevel 1. С други думи, всяко четно ниво на мащабиране 2k е намалена версия на изображение, в мащаб 1:2^k. Нивата на мащабиране са кодирани от най-високото към най-ниското.

Метод без преплитане

При този метод кодирането на дърветата MANIAC започва веднага последвано от кодирането на пикселите.

Препратки

Вижте също