Cordova 3.6:如何从Android的照片库中提取GPS Exif数据?
我正在用Cordova 3.6.x和Angularjs开发一个应用程序。除了我无法从照片库中拍摄的图像的exif数据中提取日期和位置之外,一切似乎都正常 我的目标设备是安卓4+ 从现在起,我测试: -(无android支持:() -(返回错误,例如“processMessage失败:错误:TypeError:无法调用未定义的方法“toString”和“processMessage失败:消息:S01 File1189144150”) -(无法理解它是如何工作的) 我在网上看到Cordova在返回图像之前剥离了所有exif数据。真的不可能获得这些数据吗 你能帮我想一想如何解决这个问题吗 更新 我使用ngCordova、ui路由器和。因此,我利用了ui路由器的“解决”功能,该功能具有: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在返回图
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
然后还可以将图像作为二进制数据读取,并应用类似于读取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);