aspose.info
PL

Format pliku FLIF

Zaktualizowano

Czym jest plik FLIF?

FLIF (Free Lossless Image Format) to bezstratny format obrazu, który wykorzystuje rozszerzenie .flif dla swoich plików. FLIF twierdzi, że przewyższa PNG, bezstratny WebP, bezstratny BPG i bezstratny JPEG 2000 pod względem współczynnika kompresji. FLIF wykorzystuje progresywny przeplot, dzięki czemu każde częściowe pobranie obrazu może zostać użyte jako kodowanie stratne dla całego obrazu.

Krótka historia

FLIF został ogłoszony we wrześniu 2015 r., A wersja alfa została wydana w październiku 2015 r. We wrześniu 2016 r. Została wydana pierwsza stabilna wersja FLIF.

Projekt FLIF

FLIF wykorzystuje wariant CABAC (kontekstowe adaptacyjne binarne kodowanie arytmetyczne), MANIAC (Meta-adaptacyjne kodowanie arytmetyczne bliskie zeru całkowitemu) do kompresji. MANIAC to algorytm kodowania entropijnego opracowany przez Jona Sneyersa i Pietera Wuille’a. W MANIAC konteksty to węzły drzew decyzyjnych, które są uczone dynamicznie w czasie kodowania. To sprawia, że model kontekstu jest bardziej specyficzny dla obrazu i skutkuje lepszą kompresją. FLIF ma następujące funkcje:

  • Obsługuje bezstratną kompresję
  • Obsługuje kompresję stratną z przetwarzaniem wstępnym enkodera
  • Obsługuje skalę szarości, RGB i RGBA
  • Obsługuje głębię kolorów od 1 do 16 bitów na kanał
  • Obsługuje pliki z przeplotem i bez przeplotu
  • Obsługuje progresywne dekodowanie częściowo pobranych plików
  • Obsługuje animacje
  • Obsługuje osadzone profile kolorów ICC, metadane Exif i XMP
  • Ma ograniczoną obsługę kompresji plików Camera Raw (RGGB)

Format pliku FLIF

Plik FLIF składa się z następujących czterech części:

Główny nagłówek

Główny nagłówek zawiera główne metadane, w tym szerokość, wysokość, głębię kolorów, liczbę klatek.

TypWartośćOpis
4 bajty“FLIF”Magia
4 bity3 = ni nadal; 4 = nadal; 5 = brak animacji; 6 = i animPrzeplot, animacja
4 bity1 = Skala szarości; 3 = RGB; 4 = RGBALiczba kanałów (nb_kanałów)
1 bajt‘0’,‘1’,‘2’ (‘0’=custom)Bajty na kanał (Bpc)
wariantszerokość-1szerokość
wariantwysokość-1wysokość
varintnb_frames-2 (tylko w przypadku animacji)Liczba klatek (nb_frames)

Fragmenty metadanych

Ta część zawiera metadane inne niż piksele, takie jak metadane Exif/XMP, profil kolorów ICC itp., które są zakodowane przy użyciu kompresji DEFLATE. Te kawałki są definiowane podobnie do kawałków PNG, z tą różnicą, że rozmiar uchwytu jest zakodowany ze zmienną liczbą bajtów. Nazwy fragmentów mogą składać się z 4 liter (4 bajtów) lub wartości mniejszej niż 32, co wskazuje na nieopcjonalny fragment.

Poniżej znajduje się przykład opcjonalnych uchwytów:

Nazwa fragmentuOpisZawartość (po dekompresji DEFLATE)
iCCPprofil kolorów ICCsurowe dane profilu kolorów ICC
eXifMetadane ExifNagłówek “Exif\0\0”, po którym następuje nagłówek TIFF i dane EXIF
eXmpMetadane XMPXMP zawarte w xpakiecie tylko do odczytu bez dopełnienia

Konwencja nazewnictwa

  • Pierwsza litera: Duże litery są używane w przypadku fragmentów krytycznych, a małe w przypadku porcji niekrytycznych.
  • Druga litera: Wielkie litery są używane dla fragmentów publicznych, a małe dla fragmentów prywatnych
  • Trzecia litera: Wielkie litery są używane w przypadku uchwytów, które są potrzebne do prawidłowego wyświetlenia obrazu, a małe litery nie są ważne do wyświetlenia obrazu.
  • Czwarta litera: Wielka litera jest używana w przypadku uchwytów, które można bezpiecznie kopiować na ślepo. Uchwyty z małymi literami zależą od danych obrazu.

Drugi nagłówek

Zawiera informacje dotyczące rzeczywistego kodowania pikseli.

TypOpisWarunekWartość domyślna
1 bajtBajt NUL (0x00), nazwa fragmentu strumienia bitów FLIF16
uni_int(1,16)Bity na piksel kanałówBpc == ‘0’: powtórz(nb_channels)8 if Bpc == ‘1’, 16 if Bpc == ‘2’
uni_int(0,1)Flaga: alpha_zeronb_channels > 30
uni_int(0,100)Liczba pętlinb_frames > 1
uni_int(0,60_000)Opóźnienie ramki w msnb_frames > 1: repeat(nb_frames)
uni_int(0,1)Flaga: has_custom_cutoff_and_alpha
uni_int(1,128)odcięciema_niestandardowe_odcięcie_i_alfa2
uni_int(2,128)dzielnik alfahas_custom_cutoff_and_alpha19
uni_int(0,1)Flaga: ma_custom_bitchancehas_custom_cutoff_and_alpha0
?Sukama_custom_bitchance
zmiennaTransformacje (patrz poniżej)
uni_int(1) = 0Bit wskaźnika: zrobione z transformacjami
uni_int(0,2)Predyktor niewidocznych pikselialpha_zero && przeplot && zakres alfa obejmuje zero

Kanały

Numer kanałuOpis
0Czerwony lub Szary
1Zielony
2Niebieski
3Alfa

Transformacje

TypOpis
uni_int(1) = 1Bit wskaźnika: jeszcze nie zrobione
uni_int(0,13)Identyfikator transformacji
zmiennaDane transformacji (w zależności od transformacji)

Transformacja służy do modyfikowania danych pikseli w celu lepszej kompresji i śledzenia faktycznie występujących wartości pikseli.

Dane pikseli

Ta część zawiera rzeczywiste dane pikseli zakodowane przy użyciu kodowania entropijnego MANIAC. Piksele mogą być kodowane przy użyciu kodowania z przeplotem lub bez przeplotu.

Metoda z przeplotem

W tej metodzie definiowane są poziomy powiększenia. Zoomlevel 0 jest używany dla pełnego obrazu, zoomlevel 1 jest używany dla wszystkich parzystych wierszy, zoomlevel 2 jest używany dla wszystkich parzystych kolumn na poziomie zoom 1. Innymi słowy, każdy parzysty poziom zoomu 2k jest próbkowaną w dół wersją obraz w skali 1:2^k. Poziomy powiększenia są kodowane od najwyższego do najniższego.

Metoda bez przeplotu

W tej metodzie kodowanie drzew MANIAC rozpoczyna się natychmiast po kodowaniu pikseli.

Bibliografia

Zobacz też