“Android 로봇은 Google에서 제작하여 공유한 저작물을 복제하거나 수정한 것으로 Creative Commons 3.0 저작자 표시 라이선스의 약관에 따라 사용되었습니다.”
우리가 사진을 찍고 갤러리에서 확인해보면 해상도부터 촬영시간, 촬영기기,
심지어는 촬영된 위치까지 확인할 수 있다.
이는 사진에 저장되어있는 메타데이터 덕분인데
Exif는 이 메타데이터 형식 중에선 사실상 표준에 가까운 형식이다.
자세한 정보는 여기를 참고
엄청 많은 걸 알려준다.
당연하게도 이는 안드로이드에서도 활용이 가능한데
안드로이드에서 기본적으로 제공해주는
ExifInterface 라이브러리를 사용하면 매우 쉽게 정보들을 가져올 수 있다.
우선 늘 그래왔듯.. gradle에 의존성을 추가하자
implementation "androidx.exifinterface:exifinterface:1.3.2"
사용준비는 끝났다.
바로 사용해주면 된다.
val exif = ExifInterface(getAbsolutePath(selectedImageUri))
매개변수로 정보를 가져올 이미지의 절대경로를 넣어줘야 한다.
Uri를 절대경로로 바꿔주는 메소드는 아래와 같다.
//Uri를 절대경로(Absolute Path)로 변환
private fun getAbsolutePath(uri : Uri) : String {
val proj = arrayOf(MediaStore.Images.Media.DATA)
val c : Cursor = contentResolver.query(uri, proj, null, null)!!
val index = c.getColumnIndexOrThrow(MediaStore.Images.Media.DATA)
c.moveToFirst()
val result = c.getString(index)
return result
}
exif.getAttribute(ExifInterface.TAG_DATETIME)
사용법은 정말 간단한데
getAttribute() 메소드에 매개변수로 가져오고싶은 데이터의 태그를 넣어주면 된다.
데이터의 종류는 너무 방대해서 링크를 첨부하겠다.
절대 귀찮아서 그런 것이 아니다.
필자같은 경우, 메타데이터의 위도와 경도 값을 이용하여 사진을 촬영한 위치를
카카오맵으로 띄어주는 토이 프로젝트를 만들었는데 가끔 심심풀이로 사용하는데
생각보다 괜찮은 거 같다.
덤으로, GeoCoder를 활용하여 위도와 경도를 가지고
주소를 가져올 수도 있다.
필자의 Github에 프로젝트가 업로드 되어있으니 궁금하신 분들은
참고해보시면 되겠습니다.
개인적으로 공부했던 것을 바탕으로 작성하다보니
잘못된 정보가 있을수도 있습니다.
인지하게 되면 추후 수정하겠습니다.
피드백은 언제나 환영합니다.
읽어주셔서 감사합니다.