android 10中使用图像Uri的毕加索图像旋转问题

android 10中使用图像Uri的毕加索图像旋转问题,android,picasso,android-10.0,Android,Picasso,Android 10.0,当毕加索使用图像的Uri在android 10中显示图像时,存在图像旋转问题 Uri uri = "content://media/external/images/media/12155"; Picasso.get().load(uri).into(imageView); 我使用了最新版本2.8 这是原始图像 如果android API 28(例如,问题发生在大于或等于android 29)时,则未发现此问题此类解决了此问题 有什么问题吗?比如,它会自动旋转图像?你确

当毕加索使用图像的Uri在android 10中显示图像时,存在图像旋转问题

Uri uri = "content://media/external/images/media/12155";
Picasso.get().load(uri).into(imageView);
我使用了最新版本2.8

这是原始图像


如果android API 28(例如,问题发生在大于或等于android 29)时,则未发现此问题此类解决了此问题


有什么问题吗?比如,它会自动旋转图像?你确定原作不是那样的吗?有时,我们在纵向模式下用手机侧向拍照,并认为我们在拍摄横向照片。当我在android 28中显示图像时,这是原始照片,其工作方向与原始方向相同。如果在模拟器中使用,横向/纵向设置是否与安卓8设备相同?问是因为这是我唯一能想到的。我从来没有听说过像这样依赖毕加索的东西,在安卓29中尝试这幅图像,并从LegacyExternalStorage中删除这个标志=true@Fred还要注意的是,当我使用Glide库显示相同的图像时,它的显示没有问题
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);
    }
}
Picasso
    .with(this)
    .load(uri)
    .transform(new ExifTransformation(this, uri))
    .into(imageView);