aspose.info
IT

Formato file FLIF

Aggiornato

Che cos’è un file FLIF?

FLIF (Free Lossless Image Format) è un formato di immagine senza perdita di dati che utilizza l’estensione .flif per i suoi file. FLIF afferma di superare PNG, WebP senza perdita di dati, BPG senza perdita e JPEG 2000 senza perdita di dati in termini di rapporto di compressione. FLIF utilizza l’interlacciamento progressivo, grazie al quale qualsiasi download parziale dell’immagine può essere utilizzato come codifica con perdita di dati per l’intera immagine.

Breve storia

FLIF è stato annunciato a settembre 2015 e la versione alfa è stata rilasciata a ottobre 2015. A settembre 2016 è stata rilasciata la prima versione stabile di FLIF.

Design FLIF

FLIF utilizza una variante di CABAC (Context-adaptive binary arithmetic coding), MANIAC (Meta-Adaptive Near-zero Integer Arithmetic Coding) per la compressione. MANIAC è un algoritmo di codifica entropica sviluppato da Jon Sneyers e Pieter Wuille. In MANIAC, i contesti sono nodi di alberi decisionali che vengono appresi al momento della codifica in modo dinamico. Ciò rende il modello di contesto più specifico dell’immagine e si traduce in una migliore compressione. FLIF ha le seguenti caratteristiche:

  • Supporta la compressione senza perdita di dati
  • Supporta la compressione con perdita con la preelaborazione dell’encoder
  • Supporta scala di grigi, RGB e RGBA
  • Supporta una profondità di colore da 1 a 16 bit per canale
  • Supporta file interlacciati e non interlacciati
  • Supporta la decodifica progressiva di file parzialmente scaricati
  • Supporta le animazioni
  • Supporta i profili colore ICC incorporati, i metadati Exif e XMP
  • Ha un supporto limitato per la compressione di file raw da fotocamera (RGGB)

Formato file FLIF

Un file FLIF ha le seguenti quattro parti:

Intestazione principale

L’intestazione principale contiene i metadati principali inclusi larghezza, altezza, profondità del colore, numero di fotogrammi.

TipoValoreDescrizione
4 byte“FLIF”Magia
4 bit3 = ni ancora; 4 = io ancora; 5 = niente anima; 6 = i animInterlacciamento, animazione
4 bit1 = Scala di grigi; 3 = RGB; 4 = RGBANumero di canali (nb_channels)
1 byte‘0’,‘1’,‘2’ (‘0’=personalizzato)Byte per canale (Bpc)
variantelarghezza-1larghezza
variantealtezza-1Altezza
varintnb_frames-2 (solo se animazione)Numero di frame (nb_frames)

Blocchi di metadati

Questa parte contiene metadati non pixel come Exif/XMP, profilo colore ICC, ecc. codificati utilizzando la compressione DEFLATE. Questi blocchi sono definiti in modo simile ai blocchi PNG con la differenza che la dimensione del mandrino è codificata con un numero variabile di byte. I nomi dei blocchi possono essere di 4 lettere (4 byte) o un valore inferiore a 32 che indica un blocco non opzionale.

Quello che segue è un esempio di mandrini opzionali:

Nome pezzoDescrizioneContenuto (dopo la decompressione DEFLATE)
iCCPProfilo colore ICCdati profilo colore ICC grezzo
eXifMetadati ExifIntestazione “Exif\0\0” seguita da un’intestazione TIFF e dai dati EXIF
eXmpMetadati XMPXMP contenuto in un xpacket di sola lettura senza riempimento

Convenzione di denominazione

  • Prima lettera: le lettere maiuscole vengono utilizzate per i blocchi critici e le minuscole per i blocchi non critici.
  • Seconda lettera: le lettere maiuscole vengono utilizzate per i blocchi pubblici e le minuscole per i blocchi privati
  • Terza lettera: le lettere maiuscole vengono utilizzate per i mandrini necessari per visualizzare l’immagine correttamente e le lettere minuscole non sono importanti per visualizzare l’immagine.
  • Quarta lettera: le lettere maiuscole vengono utilizzate per i mandrini che possono essere copiati alla cieca in sicurezza. I mandrini minuscoli dipendono dai dati dell’immagine.

Seconda intestazione

Contiene le informazioni relative alla codifica effettiva dei pixel.

TipoDescrizioneCondizioneValore predefinito
1 byteByte NUL (0x00), nome del blocco di un flusso di bit FLIF16
uni_int(1,16)Bit per pixel dei canaliBpc == ‘0’: repeat(nb_channels)8 se Bpc == ‘1’, 16 se Bpc == ‘2’
uni_int(0,1)Flag: alpha_zeronb_channels > 30
uni_int(0,100)Numero di loopnb_frame > 1
uni_int(0,60_000)Ritardo frame in msnb_frames > 1: repeat(nb_frames)
uni_int(0,1)Segnala: has_custom_cutoff_and_alpha
uni_int(1,128)cutoffha_custom_cutoff_and_alpha2
uni_int(2,128)divisore alfaha_custom_cutoff_and_alpha19
uni_int(0,1)Flag: has_custom_bitchancehas_custom_cutoff_and_alpha0
?Cagnaha_bitchance_personalizzata
variabileTrasformazioni (vedi sotto)
uni_int(1) = 0Bit indicatore: fatto con le trasformazioni
uni_int(0,2)Predittore pixel invisibilealpha_zero && interlacciato && l’intervallo alfa include zero

Canali

Numero del canaleDescrizione
0Rosso o grigio
1Verde
2Blu
3Alfa

Trasformazioni

TipoDescrizione
uni_int(1) = 1Bit indicatore: non ancora completato
uni_int(0,13)Identificatore di trasformazione
variabileDati di trasformazione (dipende dalla trasformazione)

La trasformazione viene utilizzata per modificare i dati dei pixel per una migliore compressione e per tenere traccia dei valori dei pixel effettivi.

Dati pixel

Questa parte contiene i dati dei pixel effettivi codificati utilizzando la codifica entropica MANIAC. I pixel possono essere codificati utilizzando una codifica interlacciata o non interlacciata.

Metodo interlacciato

In questo metodo vengono definiti i livelli di zoom. Il livello di zoom 0 viene utilizzato per l’immagine intera, il livello di zoom 1 viene utilizzato per tutte le righe pari, il livello di zoom 2 viene utilizzato per tutte le colonne di livello pari di zoom 1. In altre parole, ogni livello di zoom 2k con numero pari è una versione ridotta immagine, in scala 1:2^k. I livelli di zoom sono codificati dal più alto al più basso.

Metodo non interlacciato

In questo metodo inizia immediatamente la codifica degli alberi MANIAC seguita dalla codifica dei pixel.

Riferimenti

Vedi anche