Mariovc / ImagePicker

Android library to easily pick an image from gallery or camera app. The users can select their prefered gallery/camera app on a unique Intent. Initial gist:
https://gist.github.com/Mariovc/f06e70ebe8ca52fbbbe2
Apache License 2.0
158 stars 52 forks source link

FileProvider Uri not providing Orientation details for Exif #44

Open Code-N-K opened 6 years ago

Code-N-K commented 6 years ago

@Mariovc - // After using URI from FileProvider ExifInterface is not providing orientation details when we ftech image from camera i have tested it in api 14 to api 24, the code works for Android M only.

`private static int getRotationFromCamera(Context context, Uri imageFile) { int rotate = 0; try { context.getContentResolver().notifyChange(imageFile, null);

       // URI from FileProvider Not providing ORIENTATION details  for ExifInterface for api 14 to api 24

       ExifInterface exif = new ExifInterface(imageFile.getPath());   

        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;
            default:
                rotate = 0;
                break;
        }
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
    return rotate;
}`
Code-N-K commented 6 years ago

@Mariovc Solution for Exif : as per android documentation

https://android-developers.googleblog.com/2016/12/introducing-the-exifinterface-support-library.html

Use import android.support.media.ExifInterface;

  1. Change in gradle build for : implementation "com.android.support:exifinterface:${libs.supportVersion}"
  2. Now import android.support.media.ExifInterface; in ImageRotator

and update the method

`private static int getRotationFromCamera(Context context, Uri imageFile) { int rotate = 0;

    InputStream in = null;

    try
    {
        context.getContentResolver().notifyChange(imageFile, null);

        in = context.getContentResolver().openInputStream(imageFile);

        ExifInterface exif = new ExifInterface(in); //imageFile.getPath());

        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;
            default:
                rotate = 0;
                break;
        }
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
    finally
    {
        if (in != null)
        {
            try
            {
                in.close();
            }
            catch (IOException ignored)
            {

            }
        }
    }

    return rotate;
}`