Picasso has an image rotation issue when showing it in android 10 using Uri of image
Uri uri = "content://media/external/images/media/12155";
Picasso.get().load(uri).into(imageView);
I'm used the last version 2.8
this is the original image
this issue not found if android API 28 for example the issue happened with greater than or equals to android 29
This class solve the issue
https://daniel.perez.sh/blog/2015/image-orientation-picasso/
package com.example.util;
import android.annotation.TargetApi;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.net.Uri;
import android.os.Build;
import android.provider.MediaStore;
import com.squareup.picasso.Transformation;
@TargetApi(Build.VERSION_CODES.KITKAT)
public class ExifTransformation implements Transformation {
private static final String[] CONTENT_ORIENTATION = new String[] {
MediaStore.Images.ImageColumns.ORIENTATION
};
final Context context;
final Uri uri;
public ExifTransformation(Context context, Uri uri) {
this.context = context;
this.uri = uri;
}
@Override
public Bitmap transform(Bitmap source) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) return source;
int exifRotation = getExifOrientation(context, uri);
if (exifRotation != 0) {
Matrix matrix = new Matrix();
matrix.preRotate(exifRotation);
Bitmap rotated =
Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), matrix, true);
if (rotated != source) {
source.recycle();
}
return rotated;
}
return source;
}
@Override
public String key() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) return "documentTransform()";
return "documentExifTransform(" + uri.toString() + ")";
}
public static int getExifOrientation(Context context, Uri photoUri) {
Cursor cursor = context.getContentResolver().query(photoUri, CONTENT_ORIENTATION, null, null, null);
if (cursor.getCount() != 1) {
return -1;
}
cursor.moveToFirst();
return cursor.getInt(0);
}
}
When loading the image, the following then gave the wanted result:
Picasso
.with(this)
.load(uri)
.transform(new ExifTransformation(this, uri))
.into(imageView);