3

我正在开发一个 Android 应用程序。在我的应用程序中,我必须捕获图像并将该图像发送到服务器。在某些设备中,捕获的图像以 90 度旋转发布在服务器中。我在 stackoverflow 和其他一些网站上搜索了修复。我得到了解决方案..我全部使用了例如:

Uri selectedImage = data.getData();


File imageFile = new File(selectedImage.toString());
ExifInterface exif;
try {
exif = new ExifInterface(imageFile.getAbsolutePath());

int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);

switch(orientation) {
case ExifInterface.ORIENTATION_ROTATE_90:

rotate=90;

    break;
    case ExifInterface.ORIENTATION_ROTATE_180:

    rotate=180;
 break;
            }

但不幸的是,我总是在每个设备中都得到方向 0。即使在 90 度旋转的图像设备中。

请帮助解决我的问题的朋友。

4

3 回答 3

1

你用:

int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);

因此,您发送 defaultValue ExifInterface.ORIENTATION_NORMAL。也许您的 exif 没有属性 TAG_ORIENTATION(或 ORIENTATION_UNDEFINED)并且您获得了默认值?

尝试:

int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, -1);

看看你得到了什么。

于 2013-01-09T10:44:46.140 回答
0

我使用以下代码解决了我的问题。

private int getImageOrientation(){
    final String[] imageColumns = { MediaStore.Images.Media._ID, MediaStore.Images.ImageColumns.ORIENTATION };
    final String imageOrderBy = MediaStore.Images.Media._ID+" DESC";
    Cursor cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
            imageColumns, null, null, imageOrderBy);

    if(cursor.moveToFirst()){
        int orientation = cursor.getInt(cursor.getColumnIndex(MediaStore.Images.ImageColumns.ORIENTATION));
        rotate=orientation;
        System.out.println("orientation==="+orientation);
        cursor.close();
        return orientation;
    } else {
        return 0;
    }
}

谢谢亲爱的朋友们的回复...

于 2013-01-11T07:19:38.090 回答
0

请检查您的图像是否以 270 度旋转,将其添加到您的 switch 语句中

switch(orientation) 
{
case ExifInterface.ORIENTATION_ROTATE_90:
rotate=90;

break;
case ExifInterface.ORIENTATION_ROTATE_180:

rotate=180;
break;
case ExifInterface.ORIENTATION_ROTATE_270:

rotate=270;
break;
}
于 2016-02-03T05:12:08.323 回答