画像のExif情報を取得する2017年06月04日(編集2017年06月04日)TweetAndroidアプリ開発で画像処理を実装する機会は多いです。画像を表示する場合は、画像の向きを考慮する必要があります。ないと、画像が回転した状態で表示されてしまう可能性があります。いったことを防ぐために、画像の向きをExifで取得できます。この記事は、AndroidアプリでExifを扱う方法を記載した記事です。中級者向けサンプルコードAndroid-Media-DemoExifExifは、デジタルカメラで撮影した画像データに、撮影条件に関する情報(メタデータ)を追加して保存できる画像ファイル形式の規格です。いった情報を記録することができます。ライブラリAndroidでExifを扱う場合は、Supportライブラリを使うことをおすすめします。Supportライブラリを使うと、コンテンツUriの差異をラップして、InputStreamを通してExifInterfaceを扱うことができます。Libraryのインストールの設定をgradleにします。"25.3.1"}app/build.gradleには、次のように記述します。rootProject.supportLibVersion}ビルド後に、ExifInterfaceのサポートライブラリが利用できるようになります。画像回転Exifのorientationが設定されてる画像をそのまま表示すると以下のようになります。画像が回転して表示されてしまってます。正しい向きで表示するには、画像のExifを取得して画像を回転させる必要があります。画像UriからExifを取得するには、以下のようなコードを書きます。ExifInterfaceExifInterfaceは、openInputStreamメソッドでUriからInputStreamを取得して、ExifInterfaceのコンストラクタにinputStreamを設定します。ExifInterface(in);サポートライブラリを使うと、Uriのpathの差異を吸収することが可能です。方位は、exifInterface#getAttributeIntメソッドで、keyにExifInterface.TAG_ORIENTATIONを指定して取得します。ExifInterface.ORIENTATION_UNDEFINED);90度回転している画像の場合は、6の値が返ってきます。方位を取得したら、画像の回転度数を取得します。}方位定数で必要な回転度数がわかるので、orientationと定数を比較して回転度数を返します。最後に、画像を回転させます。Matrix();transformMatrix.setRotate(rotation);Matrix#setRotateメソッドで回転度数を設定します。最後に、このmatrixオブジェクトを使ってBitmapを生成します。}以上で、画像を回転させたBitmapが取得できます。ビルド上記のコードの動作を確認してみましょう。画像が回転して表示されました。Libraryを使うと、UriからInputStreamを通してExifが取得できるので、非常に便利です。Exifは位置情報も含んでいるので、サーバーに画像を送るときに、ローカルでExifを消したりも可能です。