在android中使用phonegap时,从画廊拍摄的图像以不同的方向显示

Posted

技术标签:

【中文标题】在android中使用phonegap时,从画廊拍摄的图像以不同的方向显示【英文标题】:Image took from gallery is displayed in different orientation while using phonegap in android 【发布时间】:2013-07-18 14:09:09 【问题描述】:

我正在使用 Sencha Touch 和 Phonegap 来显示一张用 相机。通过cordova2.7.0在iphone上拍照时, 图片以正确的方向绘制。但是使用三星s3,图片会倾斜-90°(仅适用于纵向图像)。

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

我使用上面的代码来拍照。 从相机拍摄的肖像图像以正确的方向显示,问题仅发生在从画廊拍摄的肖像图像中。有什么办法可以解决这个问题吗?

【问题讨论】:

您好,您的问题解决了吗? 【参考方案1】:

它通过添加参数 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 );

【讨论】:

你能解释一下你的问题吗? 三星edge S6、A5相机(默认不使用cordova插件)捕获的图像的图像方向发生变化。它适用于相机拍摄的屏幕截图和图片(使用cordova插件)。 encodingType.PNG 未定义 encodingTypeCamera 的枚举,因此您希望使用Camera.EncodingType.PNGnavigator.camera.encodingType.PNG 来获取它,具体取决于您的框架。虽然它实际上只是一个整数,所以查看a documentation 并使用相应的值(即0for JPEG,1 for PNG)。在选项对象中传递correctOrientation : true 后,问题可以通过两个横向之一解决。所以我猜这个插件使用陀螺仪来了解什么是“向上”。 有点晚了,但对我来说是“EncodingType”,而不是小写的“encodingType”。【参考方案2】:

它通过添加参数正确的方向简单地解决了我的问题。现在代码看起来像:

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

【讨论】:

【参考方案3】:

我的三星 Galaxy S5 也有这个问题,但是将 encodingType 从 PNG 切换为 JPEG(与 targetWidth 组合),现在它的方向正确。

此论坛帖子的一位评论者提到它是由于内存不足。 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;

【讨论】:

【参考方案4】:

cordova 插件的新更新解决了这个问题。

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

只需重新安装插件,这是他们发布的修复:

为 Android 添加对 PNG 的方向支持(关闭 #45)

【讨论】:

【参考方案5】:

正确的方向:是的,添加它对我的工作

【讨论】:

这应该是一条评论。【参考方案6】:

为任何设备设置 allowEdit : truecorrectOrientation : 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
);

【讨论】:

【参考方案7】:

这似乎是特定于设备的问题。例如,使用以下代码:

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);

这适用于 Nexus 5 并正确定位返回的图像,但它不适用于三星 Tab A 并且图像方向未更正。

我唯一的解决方法是将 allowEdit 设置为 true,因为编辑后的照片会以正确的方向返回。

【讨论】:

以上是关于在android中使用phonegap时,从画廊拍摄的图像以不同的方向显示的主要内容,如果未能解决你的问题,请参考以下文章

画廊中的 Phonegap 图像选择器无法正常工作

将相机或画廊中的图像保存在 phonegap 的画布中,并在旋转和裁剪后保存

在 imageview 中使用时从相机或画廊拍摄的图片其方向发生变化,有时在 Android 中会垂直拉伸

从android中的画廊和相机中捕获图像

从画廊 Python Kivy for Android 中选择图像

其他方式来捕捉照片 android 应用程序