Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get the Correct orientation of the image selected from the Default Image gallery

I have gone through some of the links to get the correct image orientation of the image selected from the default image gallery to be worked standard in all devices the exif tag always returns 0.

EXIF orientation tag value always 0 for image taken with portrait camera app android

Exif orientation tag returns 0

Exif data TAG_ORIENTATION always 0

http://mobisocial.stanford.edu/news/2011/08/rotating-images-in-android/

How to get an exact solution that will work on all devices?

like image 587
ramsraj111 Avatar asked Dec 09 '13 19:12

ramsraj111


People also ask

What is the orientation of image?

The two most common types of orientation are portrait and landscape. The term "portrait orientation" comes from visual art terminology and describes the dimensions used to capture a person's face and upper body in a picture; in such images, the height of the display area is greater than the width.

What is Auto photo Orientation?

DSLR cameras are equipped with a built-in sensor that detects camera orientation. Information from this sensor is embedded in photographs as they are taken, allowing portrait (tall) orientation photographs to be rotated automatically when displayed in Nikon View, PictureProject or Nikon Capture 4.


1 Answers

If the image(photo) was taken by a program made by you, you must set Parameters.setRotation with the correct rotation value.

This, depending of camera drive, rotates the image before save or save the rotation value to exif TAG_ORIENTATION.

Therefore, if TAG_ORIENTATION is null or zero, the image are in the correct orientation, otherwise you must rotate image according the value in TAG_ORIENTATION.

CODE

Get orientation from EXIF:

ExifInterface exif = null; try {     exif = new ExifInterface(path); } catch (IOException e) {     e.printStackTrace(); }   int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION,                                         ExifInterface.ORIENTATION_UNDEFINED); 

Get bitmap rotated:

Bitmap bmRotated = rotateBitmap(bitmap, orientation);   

Method to rotate bitmap:

public static Bitmap rotateBitmap(Bitmap bitmap, int orientation) {      Matrix matrix = new Matrix();     switch (orientation) {         case ExifInterface.ORIENTATION_NORMAL:             return bitmap;         case ExifInterface.ORIENTATION_FLIP_HORIZONTAL:             matrix.setScale(-1, 1);             break;         case ExifInterface.ORIENTATION_ROTATE_180:             matrix.setRotate(180);             break;         case ExifInterface.ORIENTATION_FLIP_VERTICAL:             matrix.setRotate(180);             matrix.postScale(-1, 1);             break;         case ExifInterface.ORIENTATION_TRANSPOSE:             matrix.setRotate(90);             matrix.postScale(-1, 1);             break;        case ExifInterface.ORIENTATION_ROTATE_90:            matrix.setRotate(90);            break;        case ExifInterface.ORIENTATION_TRANSVERSE:            matrix.setRotate(-90);            matrix.postScale(-1, 1);            break;        case ExifInterface.ORIENTATION_ROTATE_270:            matrix.setRotate(-90);            break;        default:            return bitmap;     }     try {         Bitmap bmRotated = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);         bitmap.recycle();         return bmRotated;     }     catch (OutOfMemoryError e) {         e.printStackTrace();         return null;     } } 
like image 119
ramaral Avatar answered Sep 27 '22 18:09

ramaral