EXIF (Exchangeable Image File Format) è lo standard per specificare i formati di immagine e audio utilizzati principalmente da fotocamere digitali e scanner. I dati EXIF includono i tag e le informazioni sui metadati sul file di immagine acquisito. I metadati possono contenere informazioni come marca della fotocamera, modello, velocità dell’otturatore, data e ora, apertura, tempo di esposizione, risoluzione X, risoluzione Y. eccetera.

Se desideri gestire, estrarre, aggiornare o rimuovere i dati EXIF delle tue immagini a livello di codice, allora questo articolo fa per te. Questo articolo tratterà i seguenti modi per manipolare i dati EXIF in Java:

Libreria di manipolazione dei metadati Java

API Java dei metadati di GroupDocs

GroupDocs.Metadata for Java è un’API Java per la gestione dei metadati facile da usare. Ha la capacità non solo di estrarre metadati da immagini come JPG, PNG o WebP, ma può anche aggiungere, modificare, aggiornare e rimuovere metadati dalle immagini e altri documenti con diverse opzioni.

Sto usando questa API in questo articolo, quindi assicurati di scaricare o integrarla nelle tue applicazioni basate su Maven semplicemente aggiungendo le seguenti configurazioni a pom.xml.

Repository e dipendenza

<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>

Estrai i dati EXIF dalle immagini in Java - Visualizzatore di metadati

Puoi leggere le proprietà dei dati EXIF seguendo semplici passaggi. Iniziamo con l’estrazione dei dati EXIF da questa immagine della Torre Eiffel. Ho selezionato un file JPG come immagine di esempio, puoi utilizzare qualsiasi file sia che si tratti di PNG, WebP, BMP, GIF o TIFF.

Immagine della Torre Eiffel per i dati EXIF
  • Carica il file di origine dell’immagine contenente le informazioni sui dati EXIF utilizzando il costruttore di classe Metadata.
  • Ottieni il suo pacchetto radice chiamando il metodo getRootPackage().
  • Dal pacchetto radice, ottieni il suo pacchetto EXIF chiamando il metodo getExifPackage().
  • Una volta ottenuto il pacchetto EXIF, puoi ottenere le proprietà EXIF dell’immagine come Make, Model, Width, Length, Date-Time, ecc. come mostrato nell’esempio di codice Java sottostante.
// 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());					
	} 
}

Ecco le informazioni EXIF che otterrai come risultato del codice sopra.

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

Per ulteriori informazioni sui pacchetti IFD (Image File Directory) e GPS (Global Positioning System), devi solo chiamare i rispettivi metodi del pacchetto EXIF, ad esempio getExifIfdPackage() o getGpsPackage(). Da questi pacchetti, puoi estrarre più informazioni come;

  • Dispositivo di acquisizione delle immagini numero di serie
  • Fotocamera Nome del proprietario
  • Commenti degli utenti
  • Altitudine
  • Latitudine
  • Longitudine
  • eccetera.

Ecco il codice che puoi aggiungere nel tuo metodo sopra per visualizzare i dati EXIF insieme alle informazioni IFD e 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());

Leggi tutti i tag EXIF delle immagini utilizzando Java

Se vuoi mostrare o estrarre tutte le proprietà EXIF di qualsiasi immagine o file, puoi farlo in passaggi simili agli esempi precedenti:

  • Basta caricare il file con il costruttore Metadata.
  • Ottieni il pacchetto radice EXIF chiamando il metodo getRootPackage().
  • Ottieni il pacchetto EXIF chiamando il metodo getExifPackage().
  • Scorri il pacchetto EXIF per ottenere le coppie nome-valore desiderate.
  • Allo stesso modo, ottieni i pacchetti IFD e GPS e visualizza le sue chiavi e valori.
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()));
		}
	}
}

Aggiorna le proprietà EXIF in Java

Puoi persino modificare facilmente i dati EXIF esistenti di qualsiasi immagine o documento. I passaggi sono semplici:

Aggiorna pacchetto EXIF

  • Ottieni il pacchetto EXIF chiamando il metodo getExifPackage().
  • Usa i metodi setter come;
  • Allo stesso modo, puoi impostare i valori per Artista, Marca, Modello, Software, Larghezza e Altezza immagine, Data, Ora, ecc.

Aggiorna pacchetto EXIF IFD

Proprio come l’aggiornamento del pacchetto EXIF, puoi aggiornare le proprietà dei pacchetti EXIF IFD e GPS. Visita la classe ExifIfdPackage o ExifGpsPackage per sapere quanto puoi personalizzare per le tue preziose immagini e documenti.

// 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");
}

Rimuovere i metadati EXIF dalle immagini in Java

Questo è molto semplice se vuoi rimuovere il pacchetto EXIF da qualsiasi file, imposta semplicemente il suo pacchetto EXIF su null chiamando setExifPackage(null) del pacchetto root.

// 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");
}

Immagini supportate e altri formati

Ecco i formati di file attualmente supportati da GroupDocs.Metadata. Puoi sempre visitare la documentazione per le informazioni aggiornate.

Vedi di più su GroupDocs.Metadata

Parliamo di più @ Forum di supporto gratuito.

Articolo correlato