Qu’est-ce qu’un fichier PGF ?
Progressive Graphics File est un format matriciel fondé sur les ondelettes qui prend en charge le décodage progressif. Il peut encoder les données d’image avec une compression avec ou sans perte.
Fonctionnement des fichiers PGF
PGF transforme les échantillons matriciels en coefficients d’ondelettes organisés en une pyramide de niveaux de résolution. Un décodeur peut s’arrêter après un niveau de résolution inférieur ou continuer à lire pour atteindre la pleine taille : la progression est donc structurelle et ne repose pas sur une image d’aperçu distincte. L’implémentation de référence est le codec open source libPGF, et digiKam constitue un exemple documenté d’utilisation en production : il stocke les miniatures dans sa base de données interne au format PGF. Les métadonnées sont transportées dans un bloc facultatif de données utilisateur dont la documentation de libPGF ne fait que proposer la structure ; ne supposez donc pas qu’un autre outil y trouvera des données EXIF ou XMP. Vérifiez à la fois la disponibilité d’un encodeur et la capacité du destinataire à analyser PGF avant de l’utiliser pour des échanges.
Points clés
- Un aperçu ne nécessite généralement pas le fichier entier. L’en-tête stocke le nombre de niveaux de la pyramide, et chaque niveau contient environ un quart des pixels du niveau immédiatement supérieur (libPGF arrondit les largeurs et hauteurs impaires à l’entier supérieur lorsqu’il les divise par deux). Un répertoire des tailles de niveaux situé après l’en-tête indique le nombre d’octets nécessaires pour décoder le plus petit niveau et chacun des suivants : un lecteur peut donc récupérer le début du fichier, décoder une petite image et poursuivre plus tard. libPGF expose ce mécanisme par un argument de niveau dans son appel de lecture, où le niveau 0 correspond à l’image en pleine taille. Vérifiez d’abord le nombre de niveaux : libPGF en attribue moins aux petites images et aucun aux très petites ; un tel fichier peut donc ne contenir que son image en pleine taille.
- Le caractère sans perte d’un fichier PGF est indiqué dans son en-tête, et non dans son nom. Le champ de qualité vaut 0 pour une compression sans perte ; les valeurs plus élevées quantifient les coefficients d’ondelettes plus grossièrement, et la documentation de libPGF décrit la qualité 4 comme avec perte, mais toujours très bonne. L’expression « sans perte » décrit uniquement l’étape d’encodage PGF : un fichier de qualité 0 se décode en restituant les pixels reçus par son encodeur, qui peuvent déjà avoir été redimensionnés ou modifiés, comme dans le cas d’une miniature. Des dimensions différentes excluent une copie exacte, mais des dimensions identiques ne la prouvent pas : comparez les pixels décodés en pleine taille avec l’original avant de considérer un fichier comme une copie exacte.
- Identifiez PGF par son contenu : un fichier commence par les octets ASCII
PGF, suivis d’un octet de version, et ses champs de plusieurs octets sont petit-boutistes. Le suffixe.pgfseul est ambigu. Le moteur de sortie pgf de Matplotlib, par exemple, enregistre des fichiers.pgfqui contiennent des commandes de dessin LaTeX, et non des données d’image PGF. - Les navigateurs n’affichent pas PGF : il ne figure pas parmi les formats d’image pour le web répertoriés dans le guide des formats d’image de MDN. La diffusion sur le web nécessite donc une conversion vers un format tel que JPEG, PNG ou WebP. Attendez-vous à une prise en charge limitée en dehors de libPGF : la documentation de digiKam décrit PGF comme « peu connu », et en 2018, dans le suivi des bogues de digiKam, un utilisateur souhaitant réutiliser ailleurs les miniatures PGF de l’application signalait avoir trouvé peu d’autres bibliothèques. En 2020, le responsable de la maintenance a répondu en proposant un convertisseur autonome de PGF vers PNG.
Quand les fichiers PGF sont utiles
Ajoutez la prise en charge de PGF lorsqu’une archive ou une application existante dépend de ce format. Son adoption limitée par rapport à JPEG ou PNG peut restreindre le choix des décodeurs et encodeurs disponibles, ainsi que la compatibilité avec les navigateurs.
Références
- libPGF : l’implémentation open source de PGF
- libPGF : détails du format PGF, structure de l’en-tête de version 6, niveaux de pyramide, qualité et codage ROI
- libPGF : caractéristiques de PGF et modes d’image
- Documentation de digiKam : formats d’image pris en charge, PGF
- MDN : guide des types et formats de fichiers d’image
- Manuel de référence de libPGF : nombre de niveaux, niveaux de lecture et quantification
- Bogue KDE 388936 : utilisation des miniatures PGF de digiKam en dehors de digiKam