aspose.info
RU

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

Обновлено

.FLIF вариант №

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

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

FLIF был анонсирован в сентябре 2015 года, а альфа-версия была выпущена в октябре 2015 года. В сентябре 2016 года была выпущена первая стабильная версия FLIF.

ФЛИФ Дизайн

FLIF использует вариант CABAC (контекстно-адаптивное двоичное арифметическое кодирование), MANIAC (метаадаптивное целочисленное арифметическое кодирование, близкое к нулю) для сжатия. MANIAC — это алгоритм энтропийного кодирования, разработанный Джоном Снейерсом и Питером Вуилле. В MANIAC контексты — это узлы деревьев решений, которые динамически изучаются во время кодирования. Это делает контекстную модель более специфичной для изображения и приводит к лучшему сжатию. FLIF имеет следующие особенности:

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

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

Файл FLIF состоит из следующих четырех частей:

Основной заголовок

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

ТипЗначениеОписание
4 байта“FLIF”Магия
4 бита3 = ni еще; 4 = я все еще; 5 = ни аним; 6 = я анимЧересстрочная развертка, анимация
4 бита1 = оттенки серого; 3 = RGB; 4 = RGBAКоличество каналов (nb_channels)
1 байт‘0’,‘1’,‘2’ (‘0’=пользовательский)Байт на канал (бит/канал)
варинтширина-1Ширина
варинтвысота-1Высота
varintnb_frames-2 (только если анимация)Количество кадров (nb_frames)

Фрагменты метаданных

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

Ниже приведен пример дополнительных патронов:

Имя чанкаОписаниеСодержимое (после DEFLATE-распаковки)
iCCPЦветовой профиль ICCнеобработанные данные цветового профиля ICC
eXifМетаданные ExifЗаголовок “Exif\0\0”, за которым следует заголовок TIFF и данные EXIF
eXmpМетаданные XMPXMP, содержащиеся в xpacket только для чтения без заполнения

Соглашение об именовании

  • Первая буква: прописные буквы используются для критических фрагментов, а строчные — для некритических фрагментов.
  • Вторая буква: прописные буквы используются для общедоступных фрагментов, а строчные — для частных.
  • Третья буква: прописные буквы используются для меток, которые необходимы для правильного отображения изображения, а строчные буквы не важны для отображения изображения.
  • Четвертая буква: Прописные буквы используются для патронов, которые можно безопасно копировать вслепую. Патроны нижнего регистра зависят от данных изображения.

Второй заголовок

Он содержит информацию о фактическом кодировании пикселей.

ТипОписаниеУсловиеЗначение по умолчанию
1 байтНулевой байт (0x00), имя блока битового потока FLIF16
uni_int(1,16)Бит на пиксель каналовBpc == ‘0’: repeat(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)Задержка кадра в мсnb_frames > 1: repeat(nb_frames)
uni_int(0,1)Флаг: has_custom_cutoff_and_alpha
uni_int(1,128)cutoffhas_custom_cutoff_and_alpha2
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. Пиксели могут быть закодированы с использованием чересстрочного или нечересстрочного кодирования.

Чересстрочный метод

В этом методе определяются уровни масштабирования. Уровень масштабирования 0 используется для полного изображения, уровень масштабирования 1 используется для всех строк с четными номерами, уровень масштабирования 2 используется для всех четных столбцов уровня масштабирования 1. Другими словами, каждый уровень масштабирования с четным номером 2k является уменьшенной версией изображение в масштабе 1:2^k. Уровни масштабирования кодируются от самого высокого к самому низкому.

Нечересстрочный метод

В этом методе кодирование деревьев MANIAC начинается сразу же после кодирования пикселей.

Использованная литература

См. также