Bra*_*ain 7 android exif rotation
我想找出一张图片的EXIF旋转.当图片显示在图库中时,它不会旋转,但在加载带有EXIF信息的图像"向左旋转"后,图片会旋转显示.
现在我想问用户,他是否想要使用旋转的图像或原始图像.
我得到一个Uri到该方法并将其存储在Bitmap中
InputStream inputStream = PaintroidApplication.applicationContext.getContentResolver().openInputStream(bitmapUri);
BitmapFactory.decodeStream(inputStream, null, options);
inputStream.close();
Run Code Online (Sandbox Code Playgroud)
现在我想使用ExifInterface来确定旋转,但是ExifInterface需要一个路径:
ExifInterface exif = new ExifInterface(bitmapUri.getPath());
rotation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
Run Code Online (Sandbox Code Playgroud)
现在我的路径有问题,logcat显示以下消息:
E/JHEAD:无法打开'/ document/image:15035'
我该如何解决这个问题,还是有其他解决方案来找出EXIF信息?
我遇到过同样的问题.由V19及以上的api提供的拣货员可能会给你这个结果.试试下面的代码,应该解决你的问题.
你修改过的代码
String path = FileUtility.getRealPathFromURI(context, Uri.parse(bitmapUri.getPath());
ExifInterface exif = new ExifInterface(path);
rotation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
Run Code Online (Sandbox Code Playgroud)
FileUtility.java
/**
* Gets the real path from file
* @param context
* @param contentUri
* @return path
*/
public static String getRealPathFromURI(Context context, Uri contentUri) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
return getPathForV19AndUp(context, contentUri);
} else {
return getPathForPreV19(context, contentUri);
}
}
/**
* Handles pre V19 uri's
* @param context
* @param contentUri
* @return
*/
public static String getPathForPreV19(Context context, Uri contentUri) {
String res = null;
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
if(cursor.moveToFirst()){;
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
res = cursor.getString(column_index);
}
cursor.close();
return res;
}
/**
* Handles V19 and up uri's
* @param context
* @param contentUri
* @return path
*/
@TargetApi(Build.VERSION_CODES.KITKAT)
public static String getPathForV19AndUp(Context context, Uri contentUri) {
String wholeID = DocumentsContract.getDocumentId(contentUri);
// Split at colon, use second item in the array
String id = wholeID.split(":")[1];
String[] column = { MediaStore.Images.Media.DATA };
// where id is equal to
String sel = MediaStore.Images.Media._ID + "=?";
Cursor cursor = context.getContentResolver().
query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
column, sel, new String[]{ id }, null);
String filePath = "";
int columnIndex = cursor.getColumnIndex(column[0]);
if (cursor.moveToFirst()) {
filePath = cursor.getString(columnIndex);
}
cursor.close();
return filePath;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8334 次 |
| 最近记录: |