从相机/图库加载图像位图时会旋转 [Android 9]
Posted
技术标签:
【中文标题】从相机/图库加载图像位图时会旋转 [Android 9]【英文标题】:Image Bitmap gets rotated when loaded from camera/gallery [Android 9] 【发布时间】:2019-11-06 05:30:58 【问题描述】:我正在从图库或相机中加载图像,以便进行编辑。我使用 EXIFInterface 来管理位图的旋转。但在三星 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;
【问题讨论】:
发生这种情况尝试裁剪图像使用裁剪图像代码,然后再将其设置为 imageview... 您的问题是什么?请记住,相机应用不需要在它们捕获的图像中记录准确的 EXIF 标头。 你能提供这个代码吗?因为我无法控制裁剪作为其第三方库...这是事实,在我使用裁剪功能后,它会获得正确的方向。 @CommonsWare 我想获得正确的图像方向,但无法进入 Android 9 .. 它告诉图像已旋转但事实并非如此。 您有什么证据表明这与 Android 9.0 有关?您测试了多少不同的 Android 9.0 设备,来自多少制造商?图片来自哪里,您是否手动检查了该图片以查看其中的 EXIF 标头类型? 【参考方案1】:我也面临同样的问题。我在没有 EXIFInterface 的情况下管理,
通过在这个条件下旋转图像 -
if (bm.getWidth() > bm.getHeight())
bm = rotateImage(bm, 270);
bm.compress(Bitmap.CompressFormat.JPEG, 100, fos);
【讨论】:
如果图像实际上是横向的,它将使其成为纵向。 这就是EXIF没有提供正确方向的问题。所以图像旋转会受到影响。以上是关于从相机/图库加载图像位图时会旋转 [Android 9]的主要内容,如果未能解决你的问题,请参考以下文章
当我在我的 android 应用程序中从图库中加载图像时,为啥位图返回较小的图像?