EXIF (Exchangeable Image File Format) je standard pro specifikaci obrazových a zvukových formátů používaných především digitálními fotoaparáty a skenery. Data EXIF zahrnují informace o tagování a metadatech o souboru zachyceného obrázku. Metadata mohou obsahovat informace, jako je značka fotoaparátu, model, rychlost závěrky, datum a čas, clona, doba expozice, rozlišení X, rozlišení Y. atd.

Pokud chcete spravovat, extrahovat, aktualizovat nebo odstraňovat EXIF data vašich obrázků programově, pak je tento článek určen právě vám. Tento článek se bude zabývat následujícími způsoby manipulace s daty EXIF v Java:

Java Metadata Manipulation Library

Metadata Java API od GroupDocs

GroupDocs.Metadata for Java je snadno použitelné rozhraní Java API pro správu metadat. Má schopnost nejen extrahovat metadata z obrázků jako JPG, PNG nebo WebP, ale také může přidávat, upravovat, aktualizovat a odstraňovat metadata z obrázků a dalších dokumentů s různými možnostmi.

V tomto článku používám toto API, takže se prosím ujistěte, že jste si stáhli nebo je integrovali do svých aplikací založených na Maven pouhým přidáním následujících konfigurací do souboru pom.xml.

Úložiště a závislost

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

Extrahujte EXIF data z obrázků v Java - Prohlížeč metadat

Vlastnosti dat EXIF si můžete přečíst podle jednoduchých kroků. Začněme extrakcí EXIF dat z tohoto obrázku Eiffelovy věže. Jako příklad obrázku jsem vybral soubor JPG, můžete použít jakýkoli ze svých souborů, ať už je to PNG, WebP, BMP, GIF nebo TIFF.

Obrázek Eiffelovy věže pro data EXIF
  • Načtěte zdrojový soubor obrázku obsahující informace o datech EXIF pomocí konstruktoru třídy Metadata.
  • Získejte jeho kořenový balíček voláním metody getRootPackage().
  • Z kořenového balíčku získejte jeho EXIF balíček voláním metody getExifPackage().
  • Jakmile budete mít balíček EXIF, můžete získat vlastnosti EXIF obrázku, jako je značka, model, šířka, délka, datum a čas atd., jak je znázorněno v níže uvedeném příkladu kódu 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());					
	} 
}

Zde jsou informace EXIF, které získáte jako výsledek výše uvedeného kódu.

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

Pro další informace o balíčku IFD (Image File Directory) a GPS (Global Positioning System) stačí zavolat příslušné metody EXIF balíčku, tj. getExifIfdPackage() nebo getGpsPackage(). Z těchto balíčků můžete získat další informace jako;

  • Sériové číslo zařízení pro snímání obrazu
  • Jméno vlastníka fotoaparátu
  • Komentáře uživatelů
  • Nadmořská výška
  • Zeměpisná šířka
  • Zeměpisná délka
  • atd.

Zde je kód, který můžete přidat do své výše uvedené metody a zobrazit data EXIF spolu s informacemi IFD a 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());

Přečtěte si všechny EXIF tagy obrázků pomocí Java

Pokud chcete zobrazit nebo extrahovat všechny vlastnosti EXIF jakéhokoli obrázku nebo souboru, můžete to udělat v krocích podobných výše uvedeným příkladům:

  • Stačí načíst soubor s konstruktorem Metadata.
  • Získejte kořenový balíček EXIF voláním metody getRootPackage().
  • Získejte balíček EXIF voláním metody getExifPackage().
  • Iterujte balíček EXIF a získejte požadované páry název-hodnota.
  • Podobně získáte balíčky IFD a GPS a zobrazí jejich klíče a hodnoty.
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()));
		}
	}
}

Aktualizujte vlastnosti EXIF v Java

Dokonce můžete snadno změnit stávající EXIF data jakéhokoli obrázku nebo jakéhokoli dokumentu. Kroky jsou jednoduché:

Aktualizujte balíček EXIF

  • Získejte balíček EXIF voláním metody getExifPackage().
  • Použijte metody nastavení jako;
  • Podobně můžete nastavit hodnoty pro Artist, Make, Model, Software, Image Width & Height, Date, Time atd.

Aktualizujte balíček EXIF IFD

Stejně jako při aktualizaci balíčku EXIF můžete aktualizovat vlastnosti balíčků EXIF IFD a GPS. Navštivte prosím třídu ExifIfdPackage nebo ExifGpsPackage a zjistěte, jak moc si můžete upravit pro své cenné obrázky a dokumenty.

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

Odstraňte metadata EXIF z obrázků v Java

To je velmi jednoduché, pokud chcete odstranit EXIF balíček z jakéhokoli souboru, stačí nastavit jeho EXIF balíček na null voláním setExifPackage(null) kořenového balíčku.

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

Podporované obrázky a další formáty

Zde jsou aktuálně podporované formáty souborů od GroupDocs.Metadata. Aktualizované informace můžete vždy navštívit v dokumentaci.

Typ dokumentu Formáty souborů
Obrázky BMP, GIF, JPG, JPEG, JPE, JP2, PNG, DJVU, DWG, DXF, WebP, TIFF, PSD, EMF, WMF
Audio & Video MP3, WAV, AVI, MOV / QT, FLV, ASF, DICOM

Další informace o GroupDocs.Metadata

Pojďme si promluvit více @ Free Support Forum.

Související článek