aspose.info
FR

Format de fichier FLIF

Mis à jour le

Qu’est-ce qu’un fichier FLIF ?

FLIF (Free Lossless Image Format) est un format d’image sans perte qui utilise l’extension .flif pour ses fichiers. FLIF prétend surpasser PNG, WebP sans perte, BPG sans perte et JPEG 2000 sans perte en termes de taux de compression. FLIF utilise un entrelacement progressif, grâce auquel tout téléchargement partiel de l’image peut être utilisé comme codage avec perte pour l’image entière.

Bref historique

FLIF a été annoncé en septembre 2015 et la version alpha a été publiée en octobre 2015. En septembre 2016, la première version stable de FLIF a été publiée.

Conception FLIF

FLIF utilise une variante de CABAC (context-adaptive binary arithmetic coding), MANIAC (Meta-Adaptive Near-zero Integer Arithmetic Coding) pour la compression. MANIAC est un algorithme de codage entropique développé par Jon Sneyers et Pieter Wuille. Dans MANIAC, les contextes sont des nœuds d’arbres de décision qui sont appris dynamiquement au moment de l’encodage. Cela rend le modèle de contexte plus spécifique à l’image et se traduit par une meilleure compression. FLIF a les caractéristiques suivantes :

  • Prend en charge la compression sans perte
  • Prend en charge la compression avec perte avec prétraitement de l’encodeur
  • Prend en charge les niveaux de gris, RVB et RVBA
  • Prend en charge la profondeur de couleur de 1 à 16 bits par canal
  • Prend en charge les fichiers entrelacés et non entrelacés
  • Prend en charge le décodage progressif des fichiers partiellement téléchargés
  • Prend en charge les animations
  • Prend en charge les profils de couleur ICC intégrés, les métadonnées Exif et XMP
  • A un support limité pour la compression des fichiers bruts de l’appareil photo (RGGB)

Format de fichier FLIF

Un fichier FLIF comporte les quatre parties suivantes :

En-tête principal

L’en-tête principal contient les principales métadonnées, y compris la largeur, la hauteur, la profondeur de couleur, le nombre d’images.

TypeValeurDescription
4 octets“FLIF”Magique
4 bits3 = ni encore ; 4 = je encore ; 5 = ni anim ; 6 = i animEntrelacement, animation
4 bits1 = Niveaux de gris ; 3 = RVB ; 4 = RVBANombre de canaux (nb_canaux)
1 octet‘0’,‘1’,‘2’ (‘0’=personnalisé)Octets par canal (Bpc)
varintlargeur-1Largeur
varinthauteur-1Hauteur
varintnb_frames-2 (uniquement si animation)Nombre d’images (nb_frames)

Morceaux de métadonnées

Cette partie contient des métadonnées non-pixel comme Exif/XMP, le profil de couleur ICC, etc. qui est encodé à l’aide de la compression DEFLATE. Ces morceaux sont définis de la même manière que les morceaux PNG, la différence étant que la taille du mandrin est codée avec un nombre variable d’octets. Les noms des blocs peuvent être de 4 lettres (4 octets) ou une valeur inférieure à 32 indiquant un bloc non facultatif.

Voici un exemple de mandrins optionnels :

Nom du blocDescriptionContenu (après décompression DEFLATE)
iCCPProfil de couleur ICCdonnées brutes du profil de couleur ICC
eXifMétadonnées ExifEn-tête “Exif\0\0” suivi d’un en-tête TIFF et des données EXIF
eXmpMétadonnées XMPXMP contenu dans un xpacket en lecture seule sans remplissage

Convention de dénomination

- Première lettre : les majuscules sont utilisées pour les blocs critiques et les minuscules sont utilisées pour les blocs non critiques.

  • Deuxième lettre : les majuscules sont utilisées pour les parties publiques et les minuscules sont utilisées pour les parties privées
  • Troisième lettre : les majuscules sont utilisées pour les mandrins nécessaires à l’affichage correct de l’image et les minuscules ne sont pas importantes pour afficher l’image.
  • Quatrième lettre : la majuscule est utilisée pour les mandrins qui peuvent être copiés à l’aveugle en toute sécurité. Les mandrins en minuscules dépendent des données d’image.

Deuxième en-tête

Celui-ci contient les informations concernant le codage réel des pixels.

TypeDescriptionConditionValeur par défaut
1 octetoctet NUL (0x00), nom de bloc d’un flux binaire FLIF16
uni_int(1,16)Bits par pixel des canauxBpc == ‘0’ : répéter(nb_canaux)8 si Bpc == ‘1’, 16 si Bpc == ‘2’
uni_int(0,1)Indicateur : alpha_zeronb_channels > 30
uni_int(0,100)Nombre de bouclesnb_frames > 1
uni_int(0,60_000)Délai de trame en msnb_frames > 1 : répéter(nb_frames)
uni_int(0,1)Indicateur : has_custom_cutoff_and_alpha
uni_int(1,128)cutoffhas_custom_cutoff_and_alpha2
uni_int(2,128)diviseur alphahas_custom_cutoff_and_alpha19
uni_int(0,1)Drapeau : has_custom_bitchancehas_custom_cutoff_and_alpha0
?Bitchancehas_custom_bitchance
variableTransformations (voir ci-dessous)
uni_int(1) = 0Bit indicateur : terminé avec transformations
uni_int(0,2)Prédicteur de pixels invisiblesalpha_zero && entrelacé && la plage alpha inclut zéro

Chaînes

Numéro de canalDescription
0Rouge ou Gris
1Vert
2Bleu
3Alpha

Transformations

TypeDescription
uni_int(1) = 1Bit indicateur : pas encore fait
uni_int(0,13)Identifiant de transformation
variableDonnées de transformation (dépend de la transformation)

La transformation est utilisée pour modifier les données de pixel pour une meilleure compression et pour garder une trace des valeurs de pixel réelles.

Données de pixels

Cette partie contient les données de pixel réelles codées à l’aide du codage entropique MANIAC. Les pixels peuvent être codés à l’aide d’un codage entrelacé ou non entrelacé.

Méthode entrelacée

Dans cette méthode, les niveaux de zoom sont définis. Le niveau de zoom 0 est utilisé pour l’image complète, le niveau de zoom 1 est utilisé pour toutes les lignes paires, le niveau de zoom 2 est utilisé pour toutes les colonnes paires du niveau de zoom 1. En d’autres termes, chaque niveau de zoom pair 2k est une version sous-échantillonnée du image, à l’échelle 1:2^k. Les niveaux de zoom sont codés du plus élevé au plus bas.

Méthode non entrelacée

Dans cette méthode, le codage des arbres MANIAC commence immédiatement suivi du codage des pixels.

Références

Voir aussi