首页 > 解决方案 > 从相机意图图像捕获图像在某些设备Android中旋转

问题描述

我试图上传用户的个人资料。在应用程序中,用户可以从图库或相机中进行选择。

当我从相机捕捉图像时,图像正在旋转。我尝试使用 exifinterface,但方向为 0,它在某些设备上运行良好。如何解决这个问题有人可以帮助我吗?

xml

<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/profile_image"
    app:placeholderImage="@drawable/defaultprofile1"
    app:placeholderImageScaleType="fitCenter"
    app:roundingBorderColor="@color/browser_actions_bg_grey"
    fresco:roundAsCircle="true"
    android:layout_width="110dp"
    android:layout_height="110dp"
    android:scaleType="fitCenter" />

代码

draweeView3.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick (View view){
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            ActivityCompat.requestPermissions(Objects.requireNonNull(getActivity()), new
                            String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA},
                    REQUEST_CAMERA_PERMISSION);
            selectImage();
        }
    }
});

private void selectImage() {
    final CharSequence[] options = {"Take Photo", "Choose from Gallery", "Cancel"};
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setTitle("Upload Photo!");
    builder.setItems(options, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int item) {
            if (options[item].equals("Take Photo")) {
                Intent takePicture = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                startActivityForResult(takePicture, 0);

            }
        }
    });
    builder.show();
}

@SuppressLint("LongLogTag")
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        if (requestCode == 0) {
            if (data != null) {
                Bitmap selectedImage = (Bitmap) data.getExtras().get("data");
                System.out.println("imagebitmap" + selectedImage);
                Uri tempUri = getImageUri(Objects.requireNonNull(getContext()), selectedImage);
                System.out.println("tempUri" + tempUri);
                String picturePath = getRealPathFromURI(tempUri);
                System.out.println("paaaaaaaa" + picturePath);
                File f = new File(picturePath);
                String imageName = f.getName();
                System.out.println("file f" + f);
                Uri imageUri = Uri.fromFile(new File(picturePath));// For files on device
                draweeView3.setImageURI(imageUri);

            }
        }
    }
}

public Uri getImageUri(Context inContext, Bitmap inImage) {
    Bitmap OutImage = Bitmap.createScaledBitmap(inImage, 1000, 1000, true);
    String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), OutImage, "Title", null);
    return Uri.parse(path);
}

public String getRealPathFromURI(Uri uri) {
    String path = "";
    if (getActivity().getContentResolver() != null) {
        Cursor cursor = getActivity().getContentResolver().query(uri, null, null, null, null);
        if (cursor != null) {
            cursor.moveToFirst();
            int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
            path = cursor.getString(idx);

            System.out.println("final path" + path);
            cursor.close();
        }
    }
    return path;
}

标签: javaandroid

解决方案


推荐阅读