EXIF (Exchangeable Image File Format) est la norme pour spécifier les formats d’image et de son principalement utilisés par les appareils photo numériques et les scanners. Les données EXIF incluent les informations de marquage et de métadonnées sur le fichier image capturé. Les métadonnées peuvent contenir des informations telles que la marque de l’appareil photo, le modèle, la vitesse d’obturation, la date et l’heure, l’ouverture, le temps d’exposition, la résolution X, la résolution Y. etc.

Si vous souhaitez gérer, extraire, mettre à jour ou supprimer les données EXIF de vos images par programmation, cet article est pour vous. Cet article couvrira les manières suivantes de manipuler les données EXIF en Java :

Bibliothèque de manipulation de métadonnées Java

API Java de métadonnées par GroupDocs

GroupDocs.Metadata for Java est une API Java de gestion des métadonnées facile à utiliser. Il a la capacité non seulement d’extraire des métadonnées d’images telles que JPG, PNG ou WebP, mais également d’ajouter, de modifier, de mettre à jour et de supprimer des métadonnées d’images et d’autres documents avec différentes options.

J’utilise cette API dans cet article, alors assurez-vous de télécharger ou de l’intégrer dans vos applications basées sur Maven en ajoutant simplement les configurations suivantes au fichier pom.xml.

Référentiel et dépendance

<repository>
	<id>GroupDocsJavaAPI</id>
	<name>GroupDocs Java API</name>
	<url>http://repository.groupdocs.com/repo/</url>
</repository>
<dependency>
    <groupId>com.groupdocs</groupId>
    <artifactId>groupdocs-metadata</artifactId>
    <version>20.5</version>
    <classifier>javadoc</classifier>
</dependency>

Extraire des données EXIF à partir d’images en Java - Visualiseur de métadonnées

Vous pouvez lire les propriétés des données EXIF en suivant des étapes simples. Commençons par l’extraction des données EXIF de cette photo de la Tour Eiffel. J’ai sélectionné un fichier JPG comme exemple d’image, vous pouvez utiliser n’importe lequel de vos fichiers, qu’il s’agisse d’un PNG, WebP, BMP, GIF ou TIFF.

Image de la Tour Eiffel pour les données EXIF
  • Chargez le fichier source de l’image contenant les informations de données EXIF à l’aide du constructeur de classe Metadata.
  • Obtenez son paquet racine en appelant la méthode getRootPackage().
  • À partir du package racine, obtenez son package EXIF en appelant la méthode getExifPackage().
  • Une fois que vous avez le package EXIF, vous pouvez obtenir des propriétés EXIF d’image telles que Make, Model, Width, Length, Date-Time, etc., comme indiqué dans l’exemple de code Java ci-dessous.
// Extract EXIF Data Package Information from image in Java
try (Metadata metadata = new Metadata("eiffel-tower.jpg")) {
	IExif root = (IExif) metadata.getRootPackage();
	if (root.getExifPackage() != null) {
		// Extract EXIF Package
		ExifPackage exifPackage = root.getExifPackage();
		System.out.println("Make : " + exifPackage.getMake());
		System.out.println("Model : " + exifPackage.getModel());
		System.out.println("Width : " + exifPackage.getImageWidth());
		System.out.println("Length : " + exifPackage.getImageLength());
		System.out.println("DateTime : " + exifPackage.getDateTime());					
	} 
}

Voici les informations EXIF que vous obtiendrez à la suite du code ci-dessus.

Make : NIKON CORPORATION
Model : NIKON D3000
Width : 640
Length : 424
DateTime : 2014:08:09 10:35:13

Pour plus d’informations sur les packages IFD (Image File Directory) et GPS (Global Positioning System), il vous suffit d’appeler les méthodes respectives du EXIF package, c’est-à-dire getExifIfdPackage() ou getGpsPackage(). À partir de ces packages, vous pouvez extraire plus d’informations telles que;

  • Appareil de capture d’image numéro de série
  • Caméra Nom du propriétaire
  • Commentaires des utilisateurs
  • Altitude
  • Latitude
  • Longitude
  • etc.

Voici le code que vous pouvez ajouter dans votre méthode ci-dessus pour afficher les données EXIF avec les informations IFD et GPS.

// EXIF IFD Package
ExifIfdPackage exifIfdPackage = exifPackage.getExifIfdPackage();
System.out.println("BodySerialNumber : " + exifIfdPackage.getBodySerialNumber());
System.out.println("CameraOwnerName : " + exifIfdPackage.getCameraOwnerName());
System.out.println("UserComment : " + exifIfdPackage.getUserComment());
// EXIF GPS Information Package
ExifGpsPackage exifGpsPackage = exifPackage.getGpsPackage();
System.out.println("getAltitude : " + exifGpsPackage.getAltitude());
System.out.println("Latitude Ref : " + exifGpsPackage.getLatitudeRef());
System.out.println("LongitudeRef : " + exifGpsPackage.getLongitudeRef());

Lire toutes les balises EXIF des images à l’aide de Java

Si vous souhaitez afficher ou extraire toutes les propriétés EXIF d’une image ou d’un fichier, vous pouvez le faire en suivant des étapes similaires aux exemples ci-dessus :

  • Chargez simplement le fichier avec le constructeur Metadata.
  • Obtenez le package racine EXIF en appelant la méthode getRootPackage().
  • Obtenez le package EXIF en appelant la méthode getExifPackage().
  • Parcourez le package EXIF pour obtenir les paires nom-valeur souhaitées.
  • De même, récupérez les packages IFD et GPS et affichez ses clés et ses valeurs.
try (Metadata metadata = new Metadata("eiffel-tower.jpg")) {
	IExif root = (IExif) metadata.getRootPackage();
	if (root.getExifPackage() != null) {
		String pattern = "%s = %s";
		// Reading all EXIF tags.
		for (TiffTag tag : root.getExifPackage().toList()) {
			System.out.println(String.format(pattern, tag.getName(), tag.getValue()));
		}
		// Extract all EXIF IFD tags.
		for (TiffTag tag : root.getExifPackage().getExifIfdPackage().toList()) {
			System.out.println(String.format(pattern, tag.getName(), tag.getValue()));
		}
		// Extract all EXIF GPS tags
		for (TiffTag tag : root.getExifPackage().getGpsPackage().toList()) {
			System.out.println(String.format(pattern, tag.getName(), tag.getValue()));
		}
	}
}

Mettre à jour les propriétés EXIF en Java

Vous pouvez même modifier facilement les données EXIF existantes de n’importe quelle image ou de n’importe quel document. Les étapes sont simples :

Mettre à jour le package EXIF

  • Obtenez le package EXIF en appelant la méthode getExifPackage().
  • Utilisez les méthodes de setter comme;
  • De même, vous pouvez définir les valeurs pour l’artiste, la marque, le modèle, le logiciel, la largeur et la hauteur de l’image, la date, l’heure, etc.

Mettre à jour le package EXIF IFD

Tout comme la mise à jour du package EXIF, vous pouvez mettre à jour les propriétés des packages EXIF IFD et GPS. Veuillez visiter la classe ExifIfdPackage ou ExifGpsPackage pour savoir combien vous pouvez personnaliser pour vos images et documents précieux.

// Update/Set new values in EXIF Data (EXIF Package and EXIF IFD Package).
try (Metadata metadata = new Metadata("eiffel-tower.jpg")) {
    IExif root = (IExif) metadata.getRootPackage();
    // Set the EXIF package if it's missing
    if (root.getExifPackage() == null) {
        root.setExifPackage(new ExifPackage());
    }
    ExifPackage exifPackage = root.getExifPackage();
    // Setting the desired values in EXIF Package and EXIF IFD Package.
    exifPackage.setCopyright("Copyright (C) 2011-2020 GroupDocs. All Rights Reserved.");
    exifPackage.setImageDescription("Eiffel Tower for EXIF");
    exifPackage.setSoftware("GroupDocs.Metadata");
    exifPackage.getExifIfdPackage().setBodySerialNumber("GD-2020");
    exifPackage.getExifIfdPackage().setCameraOwnerName("GroupDocs");
    exifPackage.getExifIfdPackage().setUserComment("Nice image captured in 2014");
    metadata.save("eiffel-tower-updated.jpg");
}

Supprimer les métadonnées EXIF des images en Java

C’est très simple si vous souhaitez supprimer le package EXIF de n’importe quel fichier, définissez simplement son package EXIF sur null en appelant setExifPackage(null) du package racine.

// Removing the EXIF data from an image.
try (Metadata metadata = new Metadata("eiffel-tower.jpg")) {
    IExif root = (IExif) metadata.getRootPackage();
    root.setExifPackage(null);
    metadata.save("eiffel-tower-no-exif.jpg");
}

Images et autres formats pris en charge

Voici les formats de fichiers actuellement pris en charge par GroupDocs.Metadata. Vous pouvez toujours visiter la documentation pour les informations mises à jour.

En savoir plus sur GroupDocs.Metadata

Parlons plus @ Forum d’assistance gratuit.

Article associé