aspose.info
UK

Формат файлу 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 контексти — це вузли дерев рішень, які динамічно вивчаються під час кодування. Це робить модель контексту більш специфічною для зображення та забезпечує краще стиснення. FLIF має наступні функції:

  • Підтримує стиснення без втрат
  • Підтримує стиснення з втратами з попередньою обробкою кодувальника
  • Підтримує градації сірого, RGB і RGBA
  • Підтримує глибину кольору від 1 до 16 біт на канал — Підтримує файли з черезрядковою розгорткою та без неї — Підтримує прогресивне декодування частково завантажених файлів
  • Підтримує анімацію — Підтримує вбудовані профілі кольорів ICC, метадані Exif і XMP
  • Має обмежену підтримку стиснення файлів Camera Raw (RGGB)

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

Файл FLIF складається з чотирьох частин:

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

Головний заголовок містить основні метадані, включаючи ширину, висоту, глибину кольору, кількість кадрів.

ТипЗначенняОпис
4 байти“FLIF”Magic
4 біти3 = ні; 4 = я все ще; 5 = ni anim; 6 = i animЧергування, анімація
4 біти1 = градації сірого; 3 = RGB; 4 = RGBAКількість каналів (nb_channels)
1 байт‘0’,‘1’,‘2’ (‘0’=власний)Байт на канал (Bpc)
varintwidth-1Width
варінтвисота-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 байтNUL байт (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: повтор (nb_frames)
uni_int(0,1)Прапор: has_custom_cutoff_and_alpha
uni_int(1,128)cutoffhas_custom_cutoff_and_alpha2
uni_int(2,128)альфа-дільникмає_настроюване_відсічення_і_альфа19
uni_int(0,1)Прапор: has_custom_bitchancehas_custom_cutoff_and_alpha0
?Bitchancehas_custom_bitchance
зміннаПеретворення (див. нижче)
uni_int(1) = 0Біт індикатора: зроблено з перетвореннями
uni_int(0,2)Прогноз невидимого пікселяальфа_нуль && черезрядкова && діапазон альфа включає нуль

Канали

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

Трансформації

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

Трансформація використовується для зміни даних пікселів для кращого стиснення та відстеження фактичних значень пікселів.

Піксельні дані

Ця частина містить фактичні піксельні дані, закодовані за допомогою ентропійного кодування MANIAC. Пікселі можуть бути закодовані за допомогою кодування через розгортку або без неї.

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

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

Метод без розгортки

У цьому методі відразу починається кодування дерев MANIAC, а потім кодування пікселів.

Посилання

– FLIF – Вікіпедія

Див. також