A JPEG file can have Exif metadata which can provide the rotation/translation field information for a raw JPEG image. So, a landscape raw JPEG image could actually be a portrait because it’s EXIF orientation could be set to ORIENTATION_ROTATE_90, the best way to handle such scenarios is to either use a library like Picasso or Glide or at least learn from them. Here is a piece of code from Picasso which loads a JPEG as an in-memory bitmap and performs the right translation/rotation.

// Get the orientation ExifInterface exifInterface = new ExifInterface(imageFilePath); int exifOrientation = exifInterface.getAttributeInt(TAG_ORIENTATION, ORIENTATION_NORMAL) // Take the source of these methods from // https://github.com/square/picasso/blob/31779ac2cb971c4534cc17bd437fab1aa0083d3d/picasso/src/main/java/com/squareup/picasso3/BitmapHunter.java#L625-L659 int exifRotation = getExifRotation(exifOrientation); int exifTranslation = getExifTranslation(exifOrientation); Matrix matrix = new Matrix(); if (exifRotation != 0) { matrix.preRotate(exifRotation); } if (exifTranslation != 1) { matrix.postScale(exifTranslation, 1); } // Now use this matrix to create a new Bitmap from the existing Bitmap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 // Get the orientation ExifInterface exifInterface = new ExifInterface ( imageFilePath ) ; int exifOrientation = exifInterface . getAttributeInt ( TAG_ORIENTATION , ORIENTATION_NORMAL ) // Take the source of these methods from // https://github.com/square/picasso/blob/31779ac2cb971c4534cc17bd437fab1aa0083d3d/picasso/src/main/java/com/squareup/picasso3/BitmapHunter.java#L625-L659 int exifRotation = getExifRotation ( exifOrientation ) ; int exifTranslation = getExifTranslation ( exifOrientation ) ; Matrix matrix = new Matrix ( ) ; if ( exifRotation != 0 ) { matrix . preRotate ( exifRotation ) ; } if ( exifTranslation != 1 ) { matrix . postScale ( exifTranslation , 1 ) ; } // Now use this matrix to create a new Bitmap from the existing Bitmap

Like this: Like Loading...