在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 未定义encodingType
是Camera
的枚举,因此您希望使用Camera.EncodingType.PNG
或navigator.camera.encodingType.PNG
来获取它,具体取决于您的框架。虽然它实际上只是一个整数,所以查看a documentation 并使用相应的值(即0
for 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 : 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
);
【讨论】:
【参考方案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 的画布中,并在旋转和裁剪后保存
在 imageview 中使用时从相机或画廊拍摄的图片其方向发生变化,有时在 Android 中会垂直拉伸