Linson
Linson

Reputation: 653

Image took from gallery is displayed in different orientation while using phonegap in android

I'm using Sencha Touch and Phonegap to display a picture recorded with the camera. When taking a picture on an iphone via cordova2.7.0, the picture is drawn with the correct orientation. But using samsung s3, the picture will be leant by -90°(only for portrait images).

navigator.camera.getPicture(onPhotoURISuccess, onFail, { quality: 25, 
          destinationType: destinationType.FILE_URI,
         targetWidth: 120,
         targeHeight: 120,
          correctOrientation: true,
          sourceType: source });

I use the above code to take picture. The portrait images took from camera displays in correct orientation, issue happens only for the portrait images took from the gallery. Is there is any way to solve this problem?

Upvotes: 21

Views: 11559

Answers (7)

Linson
Linson

Reputation: 653

It simply solved my issue by adding the parameter encodingType. Now the code looks like

var encodingType = navigator.camera.encodingType.PNG;
var destinationType = navigator.camera.DestinationType;
var destinationType = navigator.camera.DestinationType;
var source = navigator.camera.PictureSourceType;
navigator.camera.getPicture(onPhotoURISuccess, onFail, {
  quality: 50,
  destinationType: destinationType.FILE_URI,
  encodingType: encodingType.PNG,
  targetWidth: 120,
  targeHeight: 120,
  correctOrientation: true,
  sourceType: source });

Upvotes: 15

Tom Kincaid
Tom Kincaid

Reputation: 4975

This seems to be a device specific issue. For example, with the following code:

var options = {
    quality: 50,
    correctOrientation: true,
    allowEdit: false,
    destinationType: Camera.DestinationType.FILE_URI,
    sourceType: Camera.PictureSourceType.PHOTOLIBRARY,
    mediaType: Camera.MediaType.PICTURE,
    encodingType: Camera.EncodingType.JPEG
};
navigator.camera.getPicture(success,failure,options);

This works on a Nexus 5 and orients the returned image properly, however it doesn't work on a Samsung Tab A and the image orientation is not corrected.

My only workaround is to set allowEdit to true as the edited photo is returned in the proper orientation.

Upvotes: 0

Amir
Amir

Reputation: 1086

Set allowEdit : true and correctOrientation : true for any device.

navigator.camera.getPicture(onSuccess, onFail, {
quality: 60,
destinationType: Camera.DestinationType.DATA_URL,
allowEdit: true,
correctOrientatin: true,
encodingType: Camera.EncodingType.JPEG,
sourceType: Camera.PictureSourceType.PHOTOLIBRARY,
targetWidth: 3000
});

Upvotes: 0

jagadeesh
jagadeesh

Reputation: 17

correctOrientation: true, add this its work for me

Upvotes: 0

Liad Livnat
Liad Livnat

Reputation: 7475

New update for cordova plugin that solves this issues.

cordova plugin rm org.apache.cordova.camera
cordova plugin add https://github.com/apache/cordova-plugin-camera

just re-install the plugin, here is the fixes they published:

Add orientation support for PNG to Android (closes #45)

Upvotes: 1

Vishal Panchal
Vishal Panchal

Reputation: 51

It simply solved my issue by adding the parameter correctOrientation. Now the code looks like :

navigator.camera.getPicture(onPhotoURISuccess, onFail, { quality: 50, 
destinationType: destinationType.FILE_URI,
correctOrientation: true,
sourceType: source });
}

Upvotes: 5

PaulAndrewLang
PaulAndrewLang

Reputation: 379

I was having this issue with my Samsung Galaxy S5 as well, but switched encodingType from PNG to JPEG (in combination with a targetWidth) and now it has the correct orientation.

One of the commenters on this forum post mentioned it is due being out of memory. http://forum.ionicframework.com/t/camera-wrong-orientation-with-android/8583

try {
    bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
    this.orientationCorrected = true;
} catch (OutOfMemoryError oom) {
    this.orientationCorrected = false;
}

Upvotes: 1

Related Questions