通过库上传时的纵向相机图像在ImageView Android

时间:2017-03-26 16:07:46

标签: android imageview exif

在我的Android应用程序中,我有一个选项,用户可以在注册时拍摄他的照片或从他的图库上传图像。此图像一旦成功拍摄或从图库中选择,就会显示在ImageView中。下面是启动此过程的onView of ImageView代码。

这是来自活动布局。

<ImageView
        android:id="@+id/imgUserImage"
        android:layout_width="150dp"
        android:layout_height="150dp"
        android:scaleType="centerCrop"
        android:onClick="changePicture"
        app:srcCompat="@drawable/profile_image_not_provided"
        android:layout_below="@+id/textView2"
        android:layout_alignParentEnd="true"
        android:layout_marginTop="10dp" />

这来自Activity.java

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    ImageView imgProfilePicture = (ImageView)findViewById(R.id.imgUserImage);

    int exif_orn_a;

    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        Bitmap mphoto = (Bitmap) data.getExtras().get("data");

        Uri selectedImage = data.getData();
        imgProfilePicture.setImageURI(selectedImage);

        imgProfilePicture.setImageBitmap(mphoto);

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        mphoto.compress(Bitmap.CompressFormat.JPEG, 100, baos); //bitmap is required image which have to send  in Bitmap form
        byte[] byteArray = baos.toByteArray();

        encodedImage = Base64.encodeToString(byteArray, Base64.DEFAULT);
    }
    else if (requestCode == PICK_IMAGE_GALLERY) {
        Uri selectedImage = data.getData();

        String[] orientationColumn = {MediaStore.Images.Media.ORIENTATION};

        Bitmap lphoto = null;

        Cursor cur = this.getContentResolver().query(selectedImage, orientationColumn, null, null, null);

        int orientation = -1;

        if (cur != null && cur.moveToFirst()) {
            orientation = cur.getInt(cur.getColumnIndex(orientationColumn[0]));

            Toast.makeText(Register.this, "Picture Orientation "+orientation, Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(Register.this, "Wrong Orientation", Toast.LENGTH_LONG).show();
        }

        if (cur != null) cur.close();

        try {
            lphoto = MediaStore.Images.Media.getBitmap(this.getContentResolver(), selectedImage);

            imgProfilePicture.setImageURI(selectedImage);

            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            lphoto.compress(Bitmap.CompressFormat.JPEG, 100, baos); //bitmap is required image which have to send  in Bitmap form
            byte[] byteArray = baos.toByteArray();

            encodedImage = Base64.encodeToString(byteArray, Base64.DEFAULT);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

我设法正确地获得了迎新活动。现在的问题是,我应该如何在imgProfilePicture.setImageURI(selectedImage);之前旋转图像。

1 个答案:

答案 0 :(得分:0)

我设法找到了解决方案。如果您认为可以即兴发布,请随时发布更好的解决方案。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        ImageView imgProfilePicture = (ImageView)findViewById(R.id.imgUserImage);

        int exif_orn_a;

        if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
            Bitmap mphoto = (Bitmap) data.getExtras().get("data");

            Uri selectedImage = data.getData();
            imgProfilePicture.setImageURI(selectedImage);

            imgProfilePicture.setImageBitmap(mphoto);

            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            mphoto.compress(Bitmap.CompressFormat.JPEG, 100, baos); //bitmap is required image which have to send  in Bitmap form
            byte[] byteArray = baos.toByteArray();

            encodedImage = Base64.encodeToString(byteArray, Base64.DEFAULT);
        }
        else if (requestCode == PICK_IMAGE_GALLERY) {
            Uri selectedImage = data.getData();

            //Starting from here, I am checking the Orientation and storing the result in orientation variable.
            String[] orientationColumn = {MediaStore.Images.Media.ORIENTATION};

            Bitmap lphoto = null;

            Cursor cur = this.getContentResolver().query(selectedImage, orientationColumn, null, null, null);

            int orientation = -1;

            if (cur != null && cur.moveToFirst()) {
                orientation = cur.getInt(cur.getColumnIndex(orientationColumn[0]));

                Toast.makeText(Register.this, "Picture Orientation "+orientation, Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(Register.this, "Wrong Orientation", Toast.LENGTH_LONG).show();
            }

            if (cur != null) cur.close();
            //This is the end of Orientation Check.

            try {
                lphoto = MediaStore.Images.Media.getBitmap(this.getContentResolver(), selectedImage);

                imgProfilePicture.setImageURI(selectedImage);


                //Based on the Orientation Check result, I rotate the ImageView Image to make it straight.
                if (orientation == 270) {
                    imgProfilePicture.setRotation(-90);
                } else if (orientation == 0) {
                    imgProfilePicture.setRotation(0);
                }
                //This is the end of Image Rotation based on the Orientation Check Result.

                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                lphoto.compress(Bitmap.CompressFormat.JPEG, 100, baos); //bitmap is required image which have to send  in Bitmap form
                byte[] byteArray = baos.toByteArray();

                encodedImage = Base64.encodeToString(byteArray, Base64.DEFAULT);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }