android 10中使用图像Uri的毕加索图像旋转问题
当毕加索使用图像的Uri在android 10中显示图像时,存在图像旋转问题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 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);