EXIF (Exchangeable Image File Format) adalah standar untuk menentukan format gambar dan suara yang terutama digunakan oleh kamera digital dan pemindai. Data EXIF mencakup informasi penandaan dan metadata tentang file gambar yang diambil. Metadata dapat berisi informasi seperti merek kamera, model, kecepatan rana, tanggal dan waktu, apertur, waktu pencahayaan, resolusi X, resolusi Y. dll.

Jika Anda ingin mengelola, mengekstrak, memperbarui, atau menghapus data EXIF dari gambar Anda secara terprogram, artikel ini cocok untuk Anda. Artikel ini akan membahas cara-cara berikut untuk memanipulasi dengan data EXIF di Java:

Pustaka Manipulasi Metadata Java

Metadata Java API oleh GroupDocs

GroupDocs.Metadata for Java adalah API Java manajemen metadata yang mudah digunakan. Ini memiliki kemampuan untuk tidak hanya mengekstrak metadata dari gambar seperti JPG, PNG, atau WebP tetapi juga dapat menambah, mengedit, memperbarui, dan menghapus metadata dari gambar dan dokumen lain dengan opsi berbeda.

Saya menggunakan API ini dalam artikel ini, jadi pastikan untuk mengunduh atau mengintegrasikannya ke dalam aplikasi berbasis Maven Anda hanya dengan menambahkan konfigurasi berikut ke pom.xml.

Repositori & Ketergantungan

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

Ekstrak Data EXIF dari Gambar di Java - Metadata Viewer

Anda dapat membaca properti data EXIF dengan mengikuti langkah-langkah sederhana. Mari kita mulai dengan ekstraksi data EXIF dari gambar Menara Eiffel ini. Saya telah memilih file JPG sebagai contoh gambar, Anda dapat menggunakan salah satu file Anda apakah itu PNG, WebP, BMP, GIF, atau TIFF.

Gambar Menara Eiffel untuk Data EXIF
  • Muat file sumber gambar yang berisi informasi data EXIF menggunakan konstruktor kelas Metadata.
  • Dapatkan paket root-nya dengan memanggil metode getRootPackage().
  • Dari paket root, dapatkan paket EXIF dengan memanggil metode getExifPackage().
  • Setelah Anda memiliki paket EXIF, Anda bisa mendapatkan properti gambar EXIF seperti Make, Model, Width, Length, Date-Time, dll seperti yang ditunjukkan pada contoh kode Java di bawah ini.
// 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());					
	} 
}

Berikut adalah informasi EXIF yang akan Anda dapatkan sebagai hasil dari kode di atas.

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

Untuk informasi paket IFD (Image File Directory) dan GPS (Global Positioning System) lebih lanjut, Anda hanya perlu memanggil metode masing-masing paket EXIF yaitu getExifIfdPackage() atau getGpsPackage(). Dari paket-paket ini, Anda dapat mengekstrak lebih banyak informasi seperti;

  • Nomor seri perangkat penangkap gambar
  • Nama Pemilik Kamera
  • Komentar pengguna
  • Ketinggian
  • Garis Lintang
  • Garis bujur
  • dll.

Berikut adalah kode yang dapat Anda tambahkan dalam metode di atas untuk menampilkan data EXIF beserta informasi IFD dan 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());

Baca Semua Tag EXIF Gambar menggunakan Java

Jika Anda ingin menampilkan atau mengekstrak semua properti EXIF dari gambar atau file apa pun, Anda dapat melakukannya dengan langkah yang mirip dengan contoh di atas:

  • Cukup muat file dengan konstruktor Metadata.
  • Dapatkan paket akar EXIF dengan memanggil metode getRootPackage().
  • Dapatkan paket EXIF dengan memanggil metode getExifPackage().
  • Iterasi melalui paket EXIF untuk mendapatkan pasangan nama-nilai yang Anda inginkan.
  • Demikian pula, dapatkan paket IFD dan GPS dan tampilkan kunci dan nilainya.
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()));
		}
	}
}

Perbarui Properti EXIF di Java

Anda bahkan dapat mengubah data EXIF yang ada dari gambar atau dokumen apa pun dengan mudah. Langkah-langkahnya sederhana:

Perbarui Paket EXIF

  • Dapatkan paket EXIF dengan memanggil metode getExifPackage().
  • Gunakan metode penyetel seperti;
  • Demikian pula, Anda dapat mengatur nilai untuk Artis, Merek, Model, Perangkat Lunak, Lebar & Tinggi Gambar, Tanggal, Waktu, dll.

Perbarui Paket IFD EXIF

Sama seperti memperbarui paket EXIF, Anda dapat memperbarui properti paket EXIF IFD dan GPS. Kunjungi kelas ExifIfdPackage atau ExifGpsPackage untuk mengetahui seberapa banyak Anda dapat menyesuaikan gambar dan dokumen berharga Anda.

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

Hapus Metadata EXIF dari Gambar di Java

Ini sangat sederhana jika Anda ingin menghapus paket EXIF dari file apa pun, cukup atur paket EXIF ke null dengan memanggil setExifPackage(null) dari paket 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");
}

Gambar yang Didukung & Format Lain

Berikut adalah format file yang saat ini didukung oleh GroupDocs.Metadata. Anda selalu dapat mengunjungi dokumentasi untuk informasi terbaru.

Jenis Dokumen Format File
Gambar 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

Lihat selengkapnya tentang GroupDocs.Metadata

Mari kita bicara lebih banyak @ Forum Dukungan Gratis.

Artikel Terkait