EXIF (Exchangeable Image File Format) to standard określający formaty obrazu i dźwięku używane głównie przez cyfrowe aparaty fotograficzne i skanery. Dane EXIF obejmują informacje o znakowaniu i metadanych dotyczące przechwyconego pliku obrazu. Metadane mogą zawierać informacje, takie jak marka aparatu, model, czas otwarcia migawki, data i godzina, przysłona, czas ekspozycji, rozdzielczość X, rozdzielczość Y. itp.

Jeśli chcesz programowo zarządzać, wyodrębniać, aktualizować lub usuwać dane EXIF swoich obrazów, ten artykuł jest dla Ciebie. W tym artykule omówiono następujące sposoby manipulowania danymi EXIF w Javie:

Biblioteka manipulacji metadanymi Java

Metadata Java API firmy GroupDocs

GroupDocs.Metadata for Java to łatwy w obsłudze interfejs Java API do zarządzania metadanymi. Ma możliwość nie tylko wyodrębniania metadanych z obrazów takich jak JPG, PNG lub WebP, ale także może dodawać, edytować, aktualizować i usuwać metadane z obrazów i innych dokumentów za pomocą różnych opcji.

Używam tego interfejsu API w tym artykule, więc upewnij się, że pobierz lub zintegruj go ze swoimi aplikacjami opartymi na Maven, dodając po prostu następujące konfiguracje do pliku pom.xml.

Repozytorium i zależności

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

Wyodrębnij dane EXIF z obrazów w Javie - Przeglądarka metadanych

Możesz odczytać właściwości danych EXIF, wykonując proste czynności. Zacznijmy od wyodrębnienia danych EXIF z tego zdjęcia Wieży Eiffla. Wybrałem plik JPG jako przykładowy obraz, możesz użyć dowolnego ze swoich plików, niezależnie od tego, czy jest to PNG, WebP, BMP, GIF czy TIFF.

Zdjęcie wieży Eiffla dla danych EXIF
  • Załaduj plik źródłowy obrazu zawierający informacje o danych EXIF, używając konstruktora klasy Metadata.
  • Pobierz jego pakiet główny, wywołując metodę getRootPackage().
  • Z pakietu głównego pobierz jego pakiet EXIF, wywołując metodę getExifPackage().
  • Po uzyskaniu pakietu EXIF możesz uzyskać właściwości EXIF obrazu, takie jak marka, model, szerokość, długość, data-godzina itp., Jak pokazano w poniższym przykładzie kodu Java.
// 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());					
	} 
}

Oto informacje EXIF, które otrzymasz w wyniku powyższego kodu.

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

Aby uzyskać więcej informacji o pakietach IFD (Image File Directory) i GPS (Global Positioning System), wystarczy wywołać odpowiednie metody pakietu EXIF, tj. getExifIfdPackage() lub getGpsPackage(). Z tych pakietów możesz wyodrębnić więcej informacji, takich jak;

  • Numer seryjny urządzenia do przechwytywania obrazu
  • Nazwa właściciela aparatu
  • Komentarze użytkowników
  • Wysokość
  • Szerokość
  • Długość geograficzna
  • itp.

Oto kod, który możesz dodać w powyższej metodzie, aby wyświetlić dane EXIF wraz z informacjami IFD i 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());

Przeczytaj wszystkie tagi EXIF obrazów za pomocą Java

Jeśli chcesz pokazać lub wyodrębnić wszystkie właściwości EXIF dowolnego obrazu lub pliku, możesz to zrobić w krokach podobnych do powyższych przykładów:

  • Wystarczy załadować plik za pomocą konstruktora Metadata.
  • Pobierz pakiet główny EXIF, wywołując metodę getRootPackage().
  • Pobierz pakiet EXIF, wywołując metodę getExifPackage().
  • Przejrzyj pakiet EXIF, aby uzyskać żądane pary nazwa-wartość.
  • Podobnie pobierz pakiety IFD i GPS i wyświetl jego klucze i wartości.
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()));
		}
	}
}

Zaktualizuj właściwości EXIF w Javie

Możesz nawet łatwo zmienić istniejące dane EXIF dowolnego obrazu lub dowolnego dokumentu. Kroki są proste:

Zaktualizuj pakiet EXIF

  • Pobierz pakiet EXIF, wywołując metodę getExifPackage().
  • Użyj metod ustawiających, takich jak;
  • Podobnie możesz ustawić wartości Artysty, Marka, Model, Oprogramowanie, Szerokość i wysokość obrazu, Data, Czas itp.

Zaktualizuj pakiet EXIF IFD

Podobnie jak w przypadku aktualizacji pakietu EXIF, można aktualizować właściwości pakietów EXIF IFD i GPS. Odwiedź klasę ExifIfdPackage lub ExifGpsPackage, aby dowiedzieć się, ile możesz dostosować do swoich cennych obrazów i dokumentów.

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

Usuń metadane EXIF z obrazów w Javie

Jest to bardzo proste, jeśli chcesz usunąć pakiet EXIF z dowolnego pliku, po prostu ustaw jego pakiet EXIF na wartość null, wywołując setExifPackage(null) pakietu głównego.

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

Obsługiwane obrazy i inne formaty

Oto formaty plików obsługiwane obecnie przez GroupDocs.Metadata. Zawsze możesz odwiedzić dokumentację, aby uzyskać zaktualizowane informacje.

Typ dokumentu Formaty plików
Obrazy BMP, GIF, JPG, JPEG, JPE, JP2, PNG, DJVU, DWG, DXF, WebP, TIFF, PSD, EMF, WMF
Audio i wideo MP3, WAV, AVI, MOV/QT, FLV, ASF, DICOM

Zobacz więcej o GroupDocs.Metadata

Porozmawiajmy więcej @ Bezpłatne forum pomocy.

Powiązany artykuł