web-dev-qa-db-ja.com

ExifデータTAG_ORIENTATIONは常に0

ギャラリーからの画像の向きを知る必要があります(カメラで撮影)。私の最初のアプローチは、Droid 1で機能していたMediaStore.Images.Media.ORIENTATIONを使用することでした。HTCThunderboltでテストしている間、その電話はそのフィールドに0しか保存しません。

次に、exifデータの読み取りに移動しました。

 ExifInterface exifReader = new ExifInterface(mFilePath);
 exifReader.getAttributeInt(ExifInterface.TAG_ORIENTATION, -1);

これはまた、すべての画像に対して0を返します。誰でもAndroidで写真の向きを適切に取得する方法についてアイデアがありますか?

24
sgarman

私の解決策:

Exifデータから向きのチェックを削除します。それが正確であるインスタンスを見つけることができませんでした。

標準のString[] orientationColumn = {MediaStore.Images.Media.ORIENTATION};方向を取得します。

これが0 decodeStreamを使用...

if(o.outHeight > o.outWidth){
  //set orientation to portrait
}

そうでなければそれは風景です

5
sgarman

これが私のアクティビティでonActivityResult()を使用したコードです。返されるインテントは、タイプimage/*の画像を選択するためのものでした。私にはうまくいきます!

Uri imageUri = intent.getData();
String[] orientationColumn = {MediaStore.Images.Media.ORIENTATION};
Cursor cur = managedQuery(imageUri, orientationColumn, null, null, null);
int orientation = -1;
if (cur != null && cur.moveToFirst()) {
    orientation = cur.getInt(cur.getColumnIndex(orientationColumn[0]));
}  
Matrix matrix = new Matrix();
matrix.postRotate(orientation);
28
dbaugh

これは、別のAndroidバグに関連していると私が見つけたバグです。ここに投稿された合理的な解決策を見つけました 137404

3
Tolga E