タイトル通り、今回は写真の Exif 情報を取得する方法についてです。
ちなみに Exifとは、デジカメやスマートフォンで撮影した画像データに、撮影条件に関するメタデータを追加して保存できる、画像ファイル形式の規格のことをいいます。
例えば、撮影日時とかカメラの機種、カメラの向きなどが保存されています。
で、AndroidでExifを扱うときには、ExifInterface というサポートライブラリを利用します。
Android Developers Blog: Introducing the ExifInterface Support Library
https://android-developers.googleblog.com/2016/12/introducing-the-exifinterface-support-library.html
さて、使い方ですが、まず build.gradle に下記を追加します。
implementation "com.android.support:exifinterface:26.1.0"
追加する場所は dependencies{} の中です。
build.gradle を変更すると、Sync Now というリンクが表示されるので、これをクリックします。
エラーが表示されなければ、無事にライブラリが追加できました。
あとは、Activityにコードを追加してきます。
File f = new File([画像のファイルパス]); Uri uri = Uri.fromFile(f); int orientation = 1; InputStream in = null; try { in = getContentResolver().openInputStream(uri); ExifInterface exifInterface = null; if (in != null) { exifInterface = new ExifInterface(in); orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED); } } catch (IOException e) { e.getStackTrace(); Log.e("ExifActivity", e.getMessage()); } finally { if (in != null) { try { in.close(); } catch (IOException ignored) { } } }
結果は orientation という変数に入ります。
もし正常だったら 1 の値が入りますが、左に90度回転していた場合は 6 が、右に90度回転していた場合は 8 が、180度回転していた場合は 3 が入ります。
これに関しては、下記の記事を参考にしました。
iPhoneからアップロードしたJPEG写真が横向きになる問題(EXIF, Orientation)
https://qiita.com/RichardImaokaJP/items/385beb77eb39243e50a6
画像の回転については、以前紹介したこちらの記事を参考にしてください。
【Android】ImageViewの画像を180度回転させる方法
https://cpoint-lab.co.jp/article/201809/【android】imageviewの画像を180度回転させる方法/
以上、Exifから画像の向きを取得する方法でした。
次回は、位置情報の取得について説明できたらと思います。