get orientation of image from MediaStore.Images.Media.DATA

后端 未结 3 444
庸人自扰
庸人自扰 2021-01-06 09:37

i have MediaStore.Images.Media.DATA uri for an image how I can get MediaStore.Images.ImageColumns.ORIENTATION using that uri ? I am getting a NullPointerException.

相关标签:
3条回答
  • 2021-01-06 10:09

    Actually both answers are right and they must be used simultaneously.

    /**
     * @return 0, 90, 180 or 270. 0 could be returned if there is no data about rotation
     */
    public static int getImageRotation(Context context, Uri imageUri) {
        try {
            ExifInterface exif = new ExifInterface(imageUri.getPath());
            int rotation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED);
    
            if (rotation == ExifInterface.ORIENTATION_UNDEFINED)
                return getRotationFromMediaStore(context, imageUri);
            else return exifToDegrees(rotation);
        } catch (IOException e) {
            return 0;
        }
    }
    
    public static int getRotationFromMediaStore(Context context, Uri imageUri) {
        String[] columns = {MediaStore.Images.Media.DATA, MediaStore.Images.Media.ORIENTATION};
        Cursor cursor = context.getContentResolver().query(imageUri, columns, null, null, null);
        if (cursor == null) return 0;
    
        cursor.moveToFirst();
    
        int orientationColumnIndex = cursor.getColumnIndex(columns[1]);
        return cursor.getInt(orientationColumnIndex);
    }
    
    private static int exifToDegrees(int exifOrientation) {
        if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_90) {
            return 90;
        } else if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_180) {
            return 180;
        } else if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_270) {
            return 270;
        } else {
            return 0;
        }
    }
    
    0 讨论(0)
  • 2021-01-06 10:12

    Use this method to get the Orientation

    public static int getExifOrientation(String filepath) {// YOUR MEDIA PATH AS STRING
            int degree = 0;
            ExifInterface exif = null;
            try {
                exif = new ExifInterface(filepath);
            } catch (IOException ex) {
                ex.printStackTrace();
            }
            if (exif != null) {
                int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, -1);
                if (orientation != -1) {
                    switch (orientation) {
                    case ExifInterface.ORIENTATION_ROTATE_90:
                        degree = 90;
                        break;
                    case ExifInterface.ORIENTATION_ROTATE_180:
                        degree = 180;
                        break;
                    case ExifInterface.ORIENTATION_ROTATE_270:
                        degree = 270;
                        break;
                    }
    
                }
            }
            return degree;
        }
    
    0 讨论(0)
  • 2021-01-06 10:16

    Please do like this. have a try

     final Uri imageUri = data.getData();
    
                            String[] columns = {MediaStore.Images.Media.DATA, MediaStore.Images.Media.ORIENTATION};
    
                            Cursor cursor = getContentResolver().query(imageUri, columns, null, null, null);
    
    
                            if (cursor == null) {
    
                                return;
                            }
    
                            cursor.moveToFirst();
    
                            int columnIndex = cursor.getColumnIndex(columns[0]);
                            int orientationColumnIndex = cursor.getColumnIndex(columns[1]);
    
    
                            String filePath = cursor.getString(columnIndex);
                            int orientation = cursor.getInt(orientationColumnIndex);
    
                            Log.d(TAG, "got image orientation "+orientation);
    
    0 讨论(0)
提交回复
热议问题