Cordova 3.6:如何从Android的照片库中提取GPS Exif数据?

Cordova 3.6:如何从Android的照片库中提取GPS Exif数据?,android,angularjs,image,cordova,exif,Android,Angularjs,Image,Cordova,Exif,我正在用Cordova 3.6.x和Angularjs开发一个应用程序。除了我无法从照片库中拍摄的图像的exif数据中提取日期和位置之外,一切似乎都正常 我的目标设备是安卓4+ 从现在起,我测试: -(无android支持:() -(返回错误,例如“processMessage失败:错误:TypeError:无法调用未定义的方法“toString”和“processMessage失败:消息:S01 File1189144150”) -(无法理解它是如何工作的) 我在网上看到Cordova在返回图

我正在用Cordova 3.6.x和Angularjs开发一个应用程序。除了我无法从照片库中拍摄的图像的exif数据中提取日期和位置之外,一切似乎都正常

我的目标设备是安卓4+

从现在起,我测试: -(无android支持:() -(返回错误,例如“processMessage失败:错误:TypeError:无法调用未定义的方法“toString”和“processMessage失败:消息:S01 File1189144150”) -(无法理解它是如何工作的)

我在网上看到Cordova在返回图像之前剥离了所有exif数据。真的不可能获得这些数据吗

你能帮我想一想如何解决这个问题吗

更新

我使用ngCordova、ui路由器和。因此,我利用了ui路由器的“解决”功能,该功能具有:

resolve: {
    picture: ['$cordovaCamera', function($cordovaCamera) {
        var options = { 
            quality : 75,
            destinationType : navigator.camera.DestinationType.FILE_URI,
            sourceType: Camera.PictureSourceType.PHOTOLIBRARY,
            allowEdit : false,
            correctOrientation: true,
            encodingType: Camera.EncodingType.JPEG,
            saveToPhotoAlbum: false
        };
        return $cordovaCamera.getPicture(options); //TODO: we need to handle errors
    }]
}
然后在相应的控制器内,我有

myApp.controller('UploadController'[ “$scope”, “图片”, 功能(范围、图片){

等等

但是我得到了以下错误 processMessage失败:错误:TypeError:无法调用未定义的方法“toString” processMessage失败:堆栈:类型错误:无法调用未定义的方法“toString”
接下来是stacktrace和一个巨大的字符串,我非常确定它是base64,即使它不能与我在线尝试的任何base64到图像解码器一起工作…

至少在两个插件中,您是对的:

  • lorinbeer的Cordova Exif实用程序没有Android支持
  • kamilersz'cordova插件exif只有用于设置某些exif元数据和从设备获取Wi-Fi信息的API
但是Guillhermefarias的Cordova Exif似乎非常有希望,如果你展示你正在尝试的代码,我可能会帮助你。当然,获取Exif并不是不可能的,因为它是实际文件的一部分。从gallery中选择图像时,只是Cordova的默认相机插件丢失了Exif。这似乎是不可能的这是非常好的(基于我读过的代码)和文档


然后还可以将图像作为二进制数据读取,并应用类似于读取Exif的内容。请参见用户Richard Nichols提供的操作方法。

kamilersz/cordova插件Exif仅用于从设备获取Wi-fi信息,因为我将其作为唯一任务。您应该使用cordovaGuillhermefarias的Exif具有更广泛的API。

直接从回购协议中获取,以@Shree为乐

完整示例 这个例子展示了如何简单地获取智能手机拍摄的照片的exif信息

var options = {
    quality: 90,
    sourceType: 2,
    destinationType: 1,
};

function onSuccess(imageURI) {
    CordovaExif.readData(imageURI, function(exifObject) {
        console.log(exifObject);
    });
};

function onFail(message) {
    console.log('Failed because: ' + message);
};

navigator.camera.getPicture(onSuccess, onFail, options);

谢谢你的回复。由于我使用ngCordova的Angularjs,我利用了ui路由器的解析功能,在这里我有你将在我的原始问题上看到的代码。据你所知,有没有其他插件不会剥离exif数据?我不知道有没有摄像头插件不会剥离Exif、 但是Richard Nichols的答案很好。关于您的Cordova Exif代码,请检查完整的示例,该示例应该可以工作。经过一系列测试后,唯一有效的解决方案是Richard Nichols的解决方案。据我所知,当我在entry.file(函数(文件))中时我有一个对象可以给我文件的本地URL,所以我也可以将它转换为base64并显示实际的图像,不是吗?是的,你可以将它读为base64并显示出来,这就是我为我的应用程序所做的。但是这与Exif有什么关系?如果我不清楚的话,很抱歉。我正在试图在视图中显示一张带有位置和日期的图片。无论如何,哟你们的解决方案对进出口银行绝对正确!非常感谢!
var options = {
    quality: 90,
    sourceType: 2,
    destinationType: 1,
};

function onSuccess(imageURI) {
    CordovaExif.readData(imageURI, function(exifObject) {
        console.log(exifObject);
    });
};

function onFail(message) {
    console.log('Failed because: ' + message);
};

navigator.camera.getPicture(onSuccess, onFail, options);