来自画廊/相机意图的图片方向

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没有.一定要检查哪些设备并创建替代方案.

  • @ eric.itzhak"context.getContentResolver().notifyChange(imageUri,null)"行的目的是什么?" ? (2认同)

Flo*_*ser 16

以下方法以度为单位返回图像的方向.它适用于图库中的图像.返回值:

  • 正常景观:0
  • 普通人像:90
  • 颠倒的景观:180
  • 颠倒的肖像:270
  • 找不到图片:-1

代码:

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)


Val*_*her 0

我已经在一个项目中这样做了,因为我遇到了同样的问题(Android 认为你只会在横向上制作图片)。我所做的就是检测当时手机的方向,然后旋转图像。不过,它假设收到意图时方向仍然相同。


归档时间:

查看次数:

30332 次

最近记录:

7 年,11 月 前