Juh*_*ani 32 android image orientation
我从相机/画廊意图到我的应用程序的照片.在许多手机中,我从意图/ Uri中读取的图片已经旋转到正确的方向.例如N1,Legend,Desire就是这种情况.
但是在某些手机上(例如Milestone1,GalaxyS),无论拍摄图片的方式如何,图片总是在风景中.这意味着在我的应用程序中,纵向图片以错误的方式呈现给用户.我试图读取图片的EXIF信息,但方向标记始终为0.必须有一种方法可以找到图片的正确方向,因为在Milestone1中,图库应用程序正确显示肖像图片.
我如何知道在向用户展示之前是否需要自己旋转图片?
谢谢你的帮助!
eri*_*hak 25
弗洛里安的答案正在为画廊图像工作.
以下代码适用于捕获的图像,没有尝试使用图库图像,但我相信它应该工作.希望这可以帮助任何人.
代码:
public static int getCameraPhotoOrientation(Context context, Uri imageUri, String imagePath){
int rotate = 0;
try {
context.getContentResolver().notifyChange(imageUri, null);
File imageFile = new File(imagePath);
ExifInterface exif = new ExifInterface(
imageFile.getAbsolutePath());
int orientation = exif.getAttributeInt(
ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_NORMAL);
switch (orientation) {
case ExifInterface.ORIENTATION_ROTATE_270:
rotate = 270;
break;
case ExifInterface.ORIENTATION_ROTATE_180:
rotate = 180;
break;
case ExifInterface.ORIENTATION_ROTATE_90:
rotate = 90;
break;
}
Log.v(TAG, "Exif orientation: " + orientation);
} catch (Exception e) {
e.printStackTrace();
}
return rotate;
}
Run Code Online (Sandbox Code Playgroud)
编辑: 可以在评论中看到,一些设备不支持Exif信息,没有检查哪个,但我认为HTC没有.一定要检查哪些设备并创建替代方案.
Flo*_*ser 16
以下方法以度为单位返回图像的方向.它适用于图库中的图像.返回值:
代码:
public static int getOrientation(Context context, Uri photoUri) {
Cursor cursor = context.getContentResolver().query(photoUri,
new String[] { MediaStore.Images.ImageColumns.ORIENTATION },
null, null, null);
try {
if (cursor.moveToFirst()) {
return cursor.getInt(0);
} else {
return -1;
}
} finally {
cursor.close();
}
}
Run Code Online (Sandbox Code Playgroud)
我已经在一个项目中这样做了,因为我遇到了同样的问题(Android 认为你只会在横向上制作图片)。我所做的就是检测当时手机的方向,然后旋转图像。不过,它假设收到意图时方向仍然相同。
归档时间: |
|
查看次数: |
30332 次 |
最近记录: |