What is ExifInterface in Android?

Umar Syaid Himawan
4 min readOct 27, 2022

Saat foto diambil, ExifInterface digunakan untuk menulis informasi gambar. Ini juga berguna untuk melacak orientasi gambar saat menyimpannya di memori ponsel Anda.

Introduction

Kita menggunakan gambar secara signifikan di aplikasi yang kita gunakan. Untuk beberapa Aplikasi terkait Gambar, semua informasi gambar diperlukan. Namun, kita tidak dapat selalu membaca fitur gambar langsung dari gambar. Mungkin ada persyaratan untuk mengetahui informasi gambar seperti posisi GPS, tanggal/waktu, pengaturan saat pengambilan, orientasi, dan sebagainya. Sebelumnya, kami harus mengekstrak metadata dari berbagai teknik satu per satu dan membacanya untuk memahami atribut Gambar. Bahkan jika mengubah foto, seperti menghapus tag GPS atau mengubah orientasi, akan menjadi pekerjaan yang sulit ketika kita membaca. File Exif dan ExifInterface adalah jawaban untuk masalah ini.

Apa sebenarnya Exif itu?

Exchangeable Image File Format (Exif) adalah singkatan dari Exchangeable Image File Format. Ini adalah standar yang menentukan informasi rinci tentang foto atau bagian lain dari media yang direkam oleh kamera. Ini dapat menyimpan informasi penting seperti eksposur kamera, tanggal/waktu pengambilan gambar, dan bahkan posisi GPS.

Jika Anda melihat gambar di atas, Anda akan melihat bahwa ia memiliki atribut seperti panjang dan lebar gambar, tanggal dan waktu pengambilan gambar, perangkat dari mana gambar itu diambil, kode Orientasi, dan beberapa atribut gambar seperti cahaya , keseimbangan putih, panjang fokus, apakah lampu kilat menyala atau tidak, dan informasi GPS untuk gambar, yaitu panjang lat dari gambar tempat pengambilannya. Kita bisa melihat semua fitur gambar hanya dengan melihatnya. Anda sekarang harus memiliki pemahaman yang baik tentang file EXIF.

Bagaimana Cara Mendapatkan Data EXIF di Android?

Kami mempelajari apa itu Exif dan apa yang termasuk di dalamnya dengan menggunakan ExifInterface di Android. Mari kita lihat bagaimana kita bisa mendapatkan data Exif dari gambar di Android. Sejak versi 25.1.0, ExifInterface telah disertakan dalam pustaka dukungan android. Meskipun fitur tersebut sudah ada sejak Android 7.1, dengan semua kemungkinan yang ditawarkan ke UI, itu hanya masuk akal dari Android 9+. Ini telah ditingkatkan dengan lebih dari 100 karakteristik untuk membaca tag Exif, yang mencakup informasi tentang kamera, pengaturan kamera, orientasi, dan koordinat GPS

Itu hanya dapat membaca Exif file JPEG atau file gambar RAW saat ini. JPEG, DNG, CR2, NEF, NRW, ARW, RW2, ORF, PEF, SRW, RAF, dan HEIF adalah format yang didukung.

Anda harus menambahkan dependensi berikut ke build.gradle Anda jika Anda ingin menggunakan ExifInterface.

dependencies {
implementation("androidx.exifinterface:exifinterface:1.3.3")
}

Satu hal yang perlu diingat tentang data Exif adalah tidak ada tag wajib: setiap tag bersifat opsional, dan beberapa layanan bahkan menghapus data Exif seluruhnya. Akibatnya, Anda harus selalu menangani contoh di mana tidak ada data Exif, apakah itu karena tidak ada data untuk satu properti atau karena format gambar tidak dapat mengizinkan data sama sekali untuk ditautkan seperti format WebP yang terkenal

Apa Atribut Exif dan Bagaimana Cara Membacanya?

Mari kita lihat bagaimana ExifInterface dapat membaca karakteristik EXIF dari berbagai sumber dan beberapa kasus penggunaan. Anda cukup menggunakan metode getAttributeInt(), getAttributeDouble(), atau getAttribute() (untuk Strings) untuk sebagian besar atribut.

Uri untuk mengekstrak data dari konten:

Uri gfgUri; // the file uri
InputStream gfgIn;
try {
gfgIn = getContentResolver().openInputStream(gfgUri);
ExifInterface exifInterface = new ExifInterface(gfgIn);
// Extract the EXIF tag here
} catch (IOException e) {
// Handle any errors
} finally {
if (gfgIn != null) {
try {
gfgIn.close();
} catch (IOException ignored) {}
}
}

Tips : bahwa InputStreams eksternal, seperti yang dikembalikan oleh HttpURLConnection, tidak akan berfungsi dengan ExifInterface. Sangat disarankan bahwa mereka hanya digunakan dengan konten:/ atau file:/ URI.

Untuk aplikasi kamera:

Properti penulisan lebih penting setelah gambar diambil. Ini masih terbatas pada gambar JPEG untuk saat ini. Kami hanya dapat mengubah ORIENTASI JPEG, LOKASI GPS JPEG, atau yang setara dengan menggunakan ExifInterface. Atas permintaan pengguna, kami juga dapat menghapus karakteristik ini.

var  gfgExif  : ExifInterface  = ExifInterface(pictureFile.getPath())gfgExif.setAttribute(ExifInterface.TAG_ORIENTATION, "" + getPhotoOrientation(configurationProvider.getSensorPosition()))gfgExif.saveAttributes()

Orientasi gambar:

Yang disimpan dalam ORIENTASI TAG yang tepat, yang menghasilkan salah satu konstanta ORIENTATION_, adalah salah satu properti paling penting dalam hal menyajikan gambar. Anda dapat melakukan pasca-proses nilai untuk mengubahnya menjadi sudut rotasi.

int gfgRoatation = 0;int gfgOrientation  = exifInterface.getAttributeInt(ExifInterface.TAG_GFGORIENTATION ,ExifInterface.GFGORIENTATION _UNDEFINED);switch (gfgOrientation ) {      case ExifInterface.GFGORIENTATION _ROTATE_90:       gfgRoatation = 180;      break;      case ExifInterface.GFGORIENTATION _ROTATE_180:      gfgRoatation = 0;      break;       case ExifInterface.GFGORIENTATION _ROTATE_270:      gfgRoatation = 270;      break;}

Langkah #1: Buat ExifInterface terlebih dahulu:

ExifInterface gfgexif = new ExifInterface(uri.getPath());

Langkah #2: Kemudian putar bitmap menggunakan sudut rotasi Exif:

int gfgrotation = gfgexif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED);

Langkah #3: Untuk mengonversi rotasi Exif ke derajat, gunakan rumus berikut:

int gfgDegRotation = exifToDegrees(gfgRotation);

Langkah #4: Kemudian, dengan menggunakan Matriks, putar gambar menggunakan rotasi aktual gambar sebagai titik referensi:

Matrix gfgMatrix = new Matrix();if (gfgrotation != 0) {gfgMatrix.postRotate(rotationInDegrees);}

Langkah #5: Fungsi Bitmap.createBitmap, yang menerima Matriks sebagai input, digunakan untuk membuat gambar baru yang diputar:

Bitmap.createBitmap(Bitmap source, int x, int y, int width)

Dan voila, Data EXIF telah dibuat!

Beberapa Contoh Bagaimana ExifInterface Dapat Digunakan

Saat foto diambil, ExifInterface digunakan untuk menulis informasi gambar. Ini juga berguna untuk melacak orientasi gambar saat menyimpannya di memori ponsel Anda.
Kami mungkin perlu mengurangi ukuran gambar dan memperbarui informasi Exif; dalam hal ini, kita perlu mendapatkan informasi Exif dan menyimpan informasi baru kembali ke gambar.
Header gambar juga diambil dan diuraikan menggunakan ExifInterface.
Saat perangkat diputar, orientasi visual tetap konsisten.
Memperoleh gambar dari galeri dan menyajikannya dengan orientasi yang sesuai dan data lain yang disimpan dengan gambar tersebut

dokumentasi : https://developer.android.com/jetpack/androidx/releases/exifinterface

--

--