ExifInterface始终返回0方向

时间:2016-07-11 14:33:27

标签: android picasso android-bitmap

我看到很多问题,但我没有找到答案。

我尝试显示可以使用相机捕获或从存储中加载的配置文件图像。

我使用ExifInterface来确定加载图像的Picasso的正确旋转。

我不明白为什么所有照片都有方向= 0

enter image description here

在我的代码下面,非常简单:

 private void onCaptureImageResult(Intent data) {
    Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    thumbnail.compress(Bitmap.CompressFormat.JPEG, 90, bytes);


    File destination = new File(Environment.getExternalStorageDirectory(),
            System.currentTimeMillis() + ".jpg");

    FileOutputStream fo;
    try {
        destination.createNewFile();
        fo = new FileOutputStream(destination);
        fo.write(bytes.toByteArray());
        fo.close();

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }


    try {
        Picasso.with(getBaseContext()).load("file:" + destination.getPath()).rotate(MyTools.getFileExifRotation("file:" + destination.getPath())).into(avatar);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

@SuppressWarnings("deprecation")
private void onSelectFromGalleryResult(Intent data) {

    Bitmap bm=null;
    Uri uri=null;
    if (data != null) {
        try {
            bm = MediaStore.Images.Media.getBitmap(getApplicationContext().getContentResolver(), data.getData());
            uri=data.getData();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }



    try {
        Picasso.with(getBaseContext()).load("file:" + uri.getPath()).rotate(MyTools.getFileExifRotation("file:" + uri.getPath())).into(avatar);
    } catch (IOException e) {
        e.printStackTrace();
    }
}


 public static int getFileExifRotation(String path) throws IOException {
    ExifInterface exifInterface = new ExifInterface(path);
    int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
    switch (orientation) {
        case ExifInterface.ORIENTATION_ROTATE_90:
            return 90;
        case ExifInterface.ORIENTATION_ROTATE_180:
            return 180;
        case ExifInterface.ORIENTATION_ROTATE_270:
            return 270;
        default:
            return 0;
    }
}

我在LG G4手机上测试。

1 个答案:

答案 0 :(得分:2)

你有一个位图。位图不包含方向。之后,您将位图压缩为.jpg。这不会添加方向或exif标头。

因此对于那个.jpg使用ExifInterface是没用的。或者尝试获得方向。

你知道你在保存一个缩略图!?请改用原文。