Exif数据最大的问题!没有为android

时间:2015-12-19 11:51:56

标签: android image exif

美好的一天伙计们。我试图检查画廊中已经被Android默认摄像头拍摄的图像的方向。所以这里我们带着可怕而愤怒的完整问题。对于90度的逆时针旋转,该死的exif返回{ {1}} ..好吧让我们假设它没问题。但问题是,对于顺时针旋转90度,该死的exif返回相同!所以情侣图像混合。例如我有2张图像,一张逆时针旋转90度顺时针90度采取第二个,但他们的两个exif值都是ORIENTATION_ROTATE_90所以每当我看到这个标签我只旋转90度,一个图像正确旋转但另一个当然没有,因为它必须旋转负值如-90 ..所以请告诉我该怎么做?这是我获取exif数据的代码。

ORIENTATION_ROTATE_90

这是无缝的痛苦,因为客户已经让我因应用程序的图库列表视图中的非右图像旋转而被杀死...请帮助并告知是否无法获得正确的信息,是否有任何通常会告诉方向或至少相应地旋转位图的库?

1 个答案:

答案 0 :(得分:0)

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && data != null) {
        Uri uri = data.getData();
        String[] projection = {MediaStore.Images.Media.DATA};
        Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
        cursor.moveToFirst();

        int columnIndex = cursor.getColumnIndex(projection[0]);
        String picturePath = cursor.getString(columnIndex);
        cursor.close();

        try {
            ImageView imageView = (ImageView) findViewById(R.id.imgView);
            Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
            int nh = (int) (bitmap.getHeight() * (1024.0 / bitmap.getWidth()));
            Bitmap scaled = Bitmap.createScaledBitmap(bitmap, 1024, nh, true);
            imageView.setImageBitmap(scaled);

            ExifInterface exif = new ExifInterface(picturePath);
            int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, 1);
            Log.d("EXIF", "Exif: " + orientation);
            Matrix matrix = new Matrix();
            if (orientation == 6) {
                matrix.postRotate(90);
            }
            else if (orientation == 3) {
                matrix.postRotate(180);
            }
            else if (orientation == 8) {
                matrix.postRotate(270);
            }
            scaled = Bitmap.createBitmap(scaled, 0, 0, scaled.getWidth(), scaled.getHeight(), matrix, true); // rotating bitmap
            imageView.setImageBitmap(scaled);

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