EXIF方向始终为默认值

时间:2014-10-15 22:37:46

标签: android android-camera photo

我知道之前已经讨论了很多次,而且我已经看了很多问题和许多答案,而且由于我缺乏理解或我的设备,我试过它们无济于事。此外,大多数问题现在都已过时。我有纵向图像旋转到风景的经典问题。

无论如何,我有一个我正在使用的自定义相机。这是我主要活动中的一个功能:

public static int getImageOrientation(String imagePath){
     int orientation = -1;
        try {
            ExifInterface exif = new ExifInterface(imagePath);
            int exifOrientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, 
                    ExifInterface.ORIENTATION_NORMAL);

            switch (exifOrientation) {
                case ExifInterface.ORIENTATION_ROTATE_270:
                    orientation = 270;

                    break;
                case ExifInterface.ORIENTATION_ROTATE_180:
                    orientation = 180;

                    break;
                case ExifInterface.ORIENTATION_ROTATE_90:
                    orientation = 90;

                    break;

                case ExifInterface.ORIENTATION_NORMAL:
                    orientation = 0;

                    break;
                default:
                    break;
            }
        } catch (IOException e) {
            Log.e("LOG_TAG", "Unable to get image exif orientation", e);
        }

        return orientation;
 }

这个函数在我的onactivityresult中被调用:

    String abspath = data.getExtras().getString(EXTRA_IMAGE_PATH);
    mMediaUri = Uri.fromFile(new File(abspath));
    rotation = getImageOrientation(abspath);

现在,我要做的是,我将旋转存储在后端,以便当图像出现在列表视图中时,它将知道是否要旋转。问题是-1一直被返回。我能做错什么?我只是想知道照片是以肖像还是风景拍摄的。

1 个答案:

答案 0 :(得分:1)

看起来exif.getAttributeInt()返回的exifOrientation与case语句中列出的任何值都不匹配。 请先检查exifOrientation的值。

getAttributeInt(String tag,int defaultValue)返回指定标记的整数值,在本例中为TAG_ORIENTATION。如果JPEG文件中没有此类标记,或者该值无法解析为整数,则返回defaultValue。

我根据你的结果假设下面的事实:

  1. JPEG具有TAG_ORIENTATION。
  2. 但是,返回值exifOrientation与案例陈述中列出的ORIENTATION _ ***中的任何一个都不匹配。
  3. 请检查位于imagePath中的JPEG文件在EXIF元数据中是否具有正确的方向信息。
  4. 您可以使用一些图像查看器工具查看它,例如Irfanview with plugin。

相关问题