Qu’est-ce qu’un fichier MPO ?
Un fichier Multi-Picture Object stocke plusieurs images JPEG dans un même conteneur. Ces images représentent couramment des vues distinctes d’une photographie stéréoscopique, mais le conteneur peut aussi contenir d’autres images liées entre elles.
Fonctionnement des fichiers MPO
MPO est la forme fichier du Multi-Picture Format, défini par la norme DC-007 de la Camera and Imaging Products Association (CIPA), publiée pour la première fois en 2009 et révisée depuis. Le fichier commence comme un JPEG ordinaire. Sa première image contient un segment d’application APP2 identifié par MPF, qui contient un index sous forme de répertoire TIFF : le nombre d’images et, pour chacune, un type, une taille en octets et un décalage des données. Les images restantes sont des flux JPEG complets ajoutés après la première, là où un lecteur limité au JPEG ne voit que des données finales. C’est pourquoi les visionneuses qui ne reconnaissent pas ce format affichent une image plausible tout en ignorant le reste. Le format est surtout connu pour son utilisation dans les appareils photo 3D, dont les fichiers contiennent une image par point de vue, mais l’index permet aussi de typer les images comme de grandes vignettes ou comme des images d’un panorama ou d’un ensemble multiangle.
Points clés
- Pour trouver les images intégrées, lisez l’index au lieu de rechercher les marqueurs JPEG. Le segment APP2
MPFindique le nombre d’images et contient une entrée par image avec sa taille et son décalage. Pillow, par exemple, calcule chaque décalage par rapport au début de l’en-tête MPF dans ce segment, et non au début du fichier, et considère que la première image se trouve au décalage 0. Toutes les valeurs de l’index sont nécessaires pour scinder le fichier de manière sûre, car chaque image peut contenir ses propres vignettes intégrées. - Une conversion passant par un chemin de code limité au JPEG supprime les images supplémentaires sans erreur. ExifTool les décrit comme des données stockées dans la partie finale du JPEG, après la première image. Pillow ne charge que l’image principale à l’ouverture d’un MPO et accède aux autres via
seek. Lors de l’écriture d’un fichier MPO,savene conserve que la première image, sauf sisave_allest défini ou siappend_imagesest fourni. Une sortie JPEG simple contient une seule image ; conserver les deux vues d’une paire stéréoscopique au format JPEG nécessite donc d’écrire chaque vue dans son propre fichier. - Le suffixe n’est fiable dans aucun des deux sens. Pillow signale le format
MPOpour tout JPEG dont l’index MPF répertorie plus d’une image, ce qui a surpris des utilisateurs dont les fichiers.jpgissus d’un appareil photo contiennent une grande vignette supplémentaire ; les responsables du projet ont clos ce signalement parce que le fichier était un MPO valide. Le code qui choisit un traitement selon la détection du formatJPEGdoit s’attendre àMPOpour de tels fichiers. Pillow fait une exception et conserve les fichiers Ultra HDR en tant que simples JPEG. - Les images intégrées ne sont pas des vues interchangeables ; lisez donc le type de chaque entrée avant de l’extraire ou de la supprimer. Les types comprennent l’image principale, de grandes vignettes de plusieurs tailles, les images de panorama à plusieurs images, de disparité et multiangles, ainsi qu’une carte de gain. Un type peut aussi être indéfini ; un type non reconnu ne signifie donc pas qu’une image peut être supprimée. Le format Ultra HDR d’Android stocke sa carte de gain sous la forme d’une image MPF supplémentaire, mais la bibliothèque libultrahdr de Google écrit cette entrée avec un type indéfini, et la spécification d’Android localise plutôt la carte de gain à l’aide des métadonnées XMP. Une carte de gain n’est pas une photographie : elle indique de combien augmenter la luminosité de chaque pixel de l’image principale pour un affichage HDR. Conserver uniquement l’image principale préserve l’image à plage dynamique standard et supprime la déclinaison HDR. Chaque image est un JPEG complet pouvant contenir ses propres données Exif ; appliquez donc l’orientation et les autres métadonnées à chaque image photographique. La carte de gain fait exception : la spécification d’Android exige que son orientation corresponde à celle de l’image principale et ignore sa propre orientation Exif ainsi que son profil colorimétrique.
Quand les fichiers MPO sont utiles
Détectez la structure à plusieurs images lors de l’importation de photographies provenant d’appareils photo 3D ou d’autres appareils qui stockent des images liées, et extrayez chaque image lorsqu’elles sont toutes nécessaires, car les logiciels limités au JPEG ne donnent accès qu’à la première. Recherchez aussi cette structure dans les fichiers nommés .jpg : elle sert également aux grands aperçus intégrés et à la carte de gain des photos Ultra HDR.
Références
- Liste des normes CIPA : DC-007 Multi-Picture Format (éditions, téléchargement, registre des types MP)
- Noms des balises ExifTool : balises MPF et types d’images MP
- Manuel de Pillow : lecture, navigation et enregistrement des MPO
- Pillow JpegImagePlugin.py : analyse du segment MPF et fabrique JPEG ou MPO
- Pillow MpoImagePlugin.py : gestion des décalages et données Exif par image
- Ticket Pillow #4603 : fichiers JPEG reconnus comme MPO
- Format d’image Ultra HDR d’Android : rôle de la carte de gain, stockage MPF, localisation et orientation
- libultrahdr multipictureformat.cpp : entrées MPF écrites pour un fichier Ultra HDR