title: Camera image gets rotated when I upload to server
body: <p>I either take photo or select a photo from gallery and show it in an ImageView as it should be (in terms of rotation). But, whenever I upload it to server, it always uploads in landscape mode, even though it is in portrait mode in my gallery. How can I solve this?</p>
  
  <pre><code>private void takePhoto() {
      Intent takePhoto = new Intent();
      takePhoto.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
      File photoFile = null;
      try {
          photoFile = imagePath();
      } catch (IOException e) {
          Log.d(TAG, "Take Photo: " + e.getMessage());
      }
      takePhoto.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile));
      startActivityForResult(takePhoto, REQUEST_IMAGE);
  }
  
  private File imagePath() throws IOException {
      String timeStamp = new java.text.SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date());
      String imageFileName = "IMAGE_" + timeStamp + "_";
      File storageDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
      File image = File.createTempFile(imageFileName, ".jpg", storageDirectory);
      mImageLocation = image.getAbsolutePath();
      return image;
  }
  
  private void uploadMultipart() {
      String name = etName.getText().toString();
      String path = mImageLocation;
  
      try {
          String uploadId = UUID.randomUUID().toString();
          new MultipartUploadRequest(this, uploadId, API.IMAGE_UPLOAD_URL)
                  .addFileToUpload(path, "image")
                  .addParameter("name", name)
                  .setNotificationConfig(new UploadNotificationConfig())
                  .setMaxRetries(2)
                  .startUpload();
      } catch (Exception e) {
          Log.d(TAG, "Upload: " + e.getMessage());
      }
  }
  
  private Bitmap setReducedImageSize() {
      int targetImageViewWidth = capturedPhoto.getWidth();
      int targetImageViewHeight = capturedPhoto.getHeight();
  
      BitmapFactory.Options bmOptions = new BitmapFactory.Options();
      bmOptions.inJustDecodeBounds = true;
      BitmapFactory.decodeFile(mImageLocation, bmOptions);
  
      int cameraImageWidth = bmOptions.outWidth;
      int cameraImageHeight = bmOptions.outHeight;
  
      int scaleFactor = Math.min(cameraImageWidth / targetImageViewWidth, cameraImageHeight / targetImageViewHeight);
      bmOptions.inSampleSize = scaleFactor;
      bmOptions.inJustDecodeBounds = false;
  
      /*Bitmap reducedPhoto = BitmapFactory.decodeFile(mImageLocation, bmOptions);
      capturedPhoto.setImageBitmap(reducedPhoto);*/
      return BitmapFactory.decodeFile(mImageLocation, bmOptions);
  }
  
  private void rotateImage(Bitmap bitmap) {
      ExifInterface exifInterface = null;
      try {
          exifInterface = new ExifInterface(mImageLocation);
      } catch (IOException e) {
          Log.d(TAG, "Rotate Image: " + e.getMessage());
      }
      int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED);
      Matrix matrix = new Matrix();
      switch (orientation) {
          case ExifInterface.ORIENTATION_ROTATE_90:
              matrix.setRotate(90);
              break;
          case ExifInterface.ORIENTATION_ROTATE_180:
              matrix.setRotate(180);
              break;
          case ExifInterface.ORIENTATION_ROTATE_270:
              matrix.setRotate(270);
              break;
          default:
      }
      Bitmap rotatedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
      capturedPhoto.setImageBitmap(rotatedBitmap);
  }
  </code></pre>