Sencha TouchとPhonegapを使用して、カメラで記録された画像を表示しています。 cordova2.7.0を介してiPhoneで写真を撮るとき、写真は正しい向きで描かれます。ただし、samsung s3を使用すると、画像は-90°傾くようになります(ポートレート画像の場合のみ)。
navigator.camera.getPicture(onPhotoURISuccess, onFail, { quality: 25,
destinationType: destinationType.FILE_URI,
targetWidth: 120,
targeHeight: 120,
correctOrientation: true,
sourceType: source });
上記のコードを使用して写真を撮ります。カメラディスプレイから正しい向きで撮影されたポートレート画像。問題は、ギャラリーから撮影されたポートレート画像でのみ発生します。この問題を解決する方法はありますか?
パラメータencodingTypeを追加することで、問題を解決しただけです。これで、コードは次のようになります。
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 });
パラメータcorrectOrientationを追加することで、問題を解決しただけです。これで、コードは次のようになります。
navigator.camera.getPicture(onPhotoURISuccess, onFail, { quality: 50,
destinationType: destinationType.FILE_URI,
correctOrientation: true,
sourceType: source });
}
この問題を解決するcordovaプラグインの新しいアップデート。
cordova plugin rm org.Apache.cordova.camera
cordova plugin add https://github.com/Apache/cordova-plugin-camera
プラグインを再インストールするだけです。公開されている修正は次のとおりです。
PNGの向きのサポートをAndroid(#45を閉じる)に追加します
Samsung Galaxy S5でもこの問題が発生していましたが、encodingTypeをPNGからJPEG(targetWidthと組み合わせて)に切り替えたため、正しい向きになりました。
このフォーラム投稿のコメント投稿者の1人は、メモリが不足しているためだと述べています。 http://forum.ionicframework.com/t/camera-wrong-orientation-with-Android/858
try {
bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
this.orientationCorrected = true;
} catch (OutOfMemoryError oom) {
this.orientationCorrected = false;
}
これはデバイス固有の問題のようです。たとえば、次のコードを使用します。
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);
これはNexus5で機能し、返された画像の向きを正しく設定しますが、Samsung Tab Aでは機能せず、画像の向きは修正されません。
私の唯一の回避策は、編集された写真が適切な向きで返されるため、allowEditをtrueに設定することです。
任意のデバイスに対してallowEdit:trueおよびcorrectOrientation:trueを設定します。
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
});
correctOrientation:true、これを追加してください