Растровое изображение поворачивается при загрузке с камеры / галереи [Android 9] - PullRequest
1 голос
/ 24 июня 2019

Я загружаю изображение из галереи или камеры, чтобы я мог его редактировать. Я использовал EXIFInterface для управления вращением растрового изображения. Но в Samsung s8 [Android 9] он обеспечивает поворот изображения на 90 градусов, но изображение изначально не поворачивается. И в зависимости от этого поворота я поворачиваю его на 90 градусов, чего я не хочу.

Я пытался использовать ContentResolver для поворота курсора, но у него также есть та же проблема, что и у EXIFInterface. Ниже приведены оба метода, которые я пытался решить проблему:

private static int getExifOrientation(String image_absolute_path) throws IOException {
    ExifInterface ei = new ExifInterface(image_absolute_path);
    int orientation = ei.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED);
    switch (orientation) {
        case ExifInterface.ORIENTATION_ROTATE_90:
                return RotationOptions.ROTATE_90;
            case ExifInterface.ORIENTATION_ROTATE_180:
                return RotationOptions.ROTATE_180;
            case ExifInterface.ORIENTATION_ROTATE_270:
                return RotationOptions.ROTATE_270;
            default:
                return RotationOptions.NO_ROTATION;
    }
}

 private static int getOrientation(Context context, Uri photoUri) {
        try {
            Uri imageContentUri = getImageContentUri(context, photoUri.getPath());
            if (imageContentUri == null) {
                return -1;
            }
            Cursor cursor = context.getContentResolver().query(imageContentUri, new String[]{MediaStore.Images.ImageColumns.ORIENTATION}, null, null, null);
            if (cursor == null) {
                return -1;
            }
            if (cursor.getCount() != 1) {
                cursor.close();
                return -1;
            }
            cursor.moveToFirst();
            int orientation = cursor.getInt(0);
            cursor.close();
            cursor = null;
            return orientation;
        } catch (Exception e) {
            return -1;
        }
    }

1 Ответ

0 голосов
/ 24 июня 2019

Я тоже столкнулся с той же проблемой. Обошлось без EXIFInterface,

Поворотом изображения с этим условием -

if (bm.getWidth() > bm.getHeight()) {
            bm = rotateImage(bm, 270);
        }
        bm.compress(Bitmap.CompressFormat.JPEG, 100, fos);
...