Maintaining image orientation after compression

here is my code

// // reading an image captured using phone camera. Orientation of this // image is always return value 6 (ORIENTATION_ROTATE_90) no matter if // it is captured in landscape or portrait mode // Bitmap bmp = BitmapFactory.decodeFile(imagePath.getAbsolutePath()); // // save as : I am compressing this image and writing it back. Orientation //of this image always returns value 0 (ORIENTATION_UNDEFINED) imagePath = new File(imagePath.getAbsolutePath().replace(".jpg", "_1.jpg")); FileOutputStream fos0 = new FileOutputStream(imagePath); boolean b = bmp.compress(CompressFormat.JPEG, 10, fos0); fos0.flush(); fos0.close(); fos0 = null; 

After compression and saving, the image rotates 90 degrees, although ExifInterface returns 0 (ORIENTATION_UNDEFINED). Any pointer how I can keep the orientation of the original image; in this case, it is 6 (or ORIENTATION_ROTATE_90).

thanks.

+6
source share
2 answers

After a short search on stackoverflow, it turned out that someone had already explained this problem nicely here with a solution (which I saved).

+4
source

The following code will return the corner of the image using ORIENTATION .

 public static float rotationForImage(Context context, Uri uri) { if (uri.getScheme().equals("content")) { String[] projection = { Images.ImageColumns.ORIENTATION }; Cursor c = context.getContentResolver().query( uri, projection, null, null, null); if (c.moveToFirst()) { return c.getInt(0); } } else if (uri.getScheme().equals("file")) { try { ExifInterface exif = new ExifInterface(uri.getPath()); int rotation = (int)exifOrientationToDegrees( exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL)); return rotation; } catch (IOException e) { Log.e(TAG, "Error checking exif", e); } } return 0f; } private static float exifOrientationToDegrees(int exifOrientation) { if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_90) { return 90; } else if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_180) { return 180; } else if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_270) { return 270; } return 0; } } 
0
source

All Articles