Cordova 3.6:如何从 Android 的照片库中提取 GPS Exif 数据?
Cordova 3.6: how can I extract GPS Exif data from photo library in Android?
我正在使用 Cordova 3.6.x 和 Angularjs 开发应用程序。一切似乎都正常,除了我无法从从照片库拍摄的图像的 exif 数据中提取日期和位置。
我的目标设备是 Android 4+
从现在开始我测试了:
- https://github.com/lorinbeer/cordova-exif-utility(不支持 android :( )
- https://github.com/guilhermefarias/cordova-exif(返回 "processMessage failed: Error: TypeError: Cannot call method 'toString' of undefined" 和 "processMessage failed: Message: S01 File1189144150" 等错误)
- https://github.com/kamilersz/cordova-plugin-exif(无法理解它是如何工作的)
我在网上看到 Cordova 在返回图像之前去除了所有的 exif 数据。真的拿不到那些数据吗?
你能帮我弄清楚如何解决这个问题吗?
更新
我将 Angular 与 ngCordova、ui-router 和 https://github.com/guilhermefarias/cordova-exif 一起使用。所以我利用了 ui-router 的 "resolve" 功能,它具有:
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
}]
}
然后在对应的controller里面我有
myApp.controller('UploadController', [
'$范围',
'picture',
函数($范围,图片){
//Picture
$scope.snapShot = picture;
CordovaExif.readData(picture, function(exifObject) {
console.log(exifObject);
});
等..
但是我收到以下错误
processMessage 失败:错误:TypeError:无法调用未定义的方法 'toString'
processMessage 失败:堆栈:TypeError:无法调用未定义的方法 'toString'
接下来是堆栈跟踪和一个巨大的字符串,我很确定它是 base64,即使它不适用于我在网上尝试过的任何 base64 图像解码器...
您至少 两个 插件是正确的:
- lorinbeer 的 Cordova Exif 实用程序 没有 Android 支持
- kamilersz' cordova-plugin-exif 只有 API 用于设置一些 Exif 元数据和从设备获取 Wi-Fi 信息。
但是 guilhermefarias 的 Cordova Exif 看起来很有前途,如果您展示您正在尝试的代码,我也许可以帮助您。当然,获取 Exif 并非不可能,因为它是实际文件的一部分。从图库中选择图像时,只是 Cordova 的默认相机插件丢失了 Exif。这似乎做得很好(基于我阅读的代码)并记录在案。
然后还可以将图像作为二进制数据读取,并应用用户 Richard Nichols 提供的类似 Exif.js to read the Exif. See this answer 的方法。
kamilersz/cordova-plugin-exif 仅用于从设备获取 Wi-fi 信息,因为我将其用于单独分配。您应该使用 guilhermefarias 的 Cordova Exif 和更广泛的 API.
为了@Shree 的乐趣,直接从 repo 中获取
完整示例
这个例子展示了如何简单的获取智能手机拍摄的照片的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);
我正在使用 Cordova 3.6.x 和 Angularjs 开发应用程序。一切似乎都正常,除了我无法从从照片库拍摄的图像的 exif 数据中提取日期和位置。
我的目标设备是 Android 4+
从现在开始我测试了: - https://github.com/lorinbeer/cordova-exif-utility(不支持 android :( ) - https://github.com/guilhermefarias/cordova-exif(返回 "processMessage failed: Error: TypeError: Cannot call method 'toString' of undefined" 和 "processMessage failed: Message: S01 File1189144150" 等错误) - https://github.com/kamilersz/cordova-plugin-exif(无法理解它是如何工作的)
我在网上看到 Cordova 在返回图像之前去除了所有的 exif 数据。真的拿不到那些数据吗?
你能帮我弄清楚如何解决这个问题吗?
更新
我将 Angular 与 ngCordova、ui-router 和 https://github.com/guilhermefarias/cordova-exif 一起使用。所以我利用了 ui-router 的 "resolve" 功能,它具有:
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
}]
}
然后在对应的controller里面我有
myApp.controller('UploadController', [ '$范围', 'picture', 函数($范围,图片){
//Picture
$scope.snapShot = picture;
CordovaExif.readData(picture, function(exifObject) {
console.log(exifObject);
});
等..
但是我收到以下错误 processMessage 失败:错误:TypeError:无法调用未定义的方法 'toString' processMessage 失败:堆栈:TypeError:无法调用未定义的方法 'toString' 接下来是堆栈跟踪和一个巨大的字符串,我很确定它是 base64,即使它不适用于我在网上尝试过的任何 base64 图像解码器...
您至少 两个 插件是正确的:
- lorinbeer 的 Cordova Exif 实用程序 没有 Android 支持
- kamilersz' cordova-plugin-exif 只有 API 用于设置一些 Exif 元数据和从设备获取 Wi-Fi 信息。
但是 guilhermefarias 的 Cordova Exif 看起来很有前途,如果您展示您正在尝试的代码,我也许可以帮助您。当然,获取 Exif 并非不可能,因为它是实际文件的一部分。从图库中选择图像时,只是 Cordova 的默认相机插件丢失了 Exif。这似乎做得很好(基于我阅读的代码)并记录在案。
然后还可以将图像作为二进制数据读取,并应用用户 Richard Nichols 提供的类似 Exif.js to read the Exif. See this answer 的方法。
kamilersz/cordova-plugin-exif 仅用于从设备获取 Wi-fi 信息,因为我将其用于单独分配。您应该使用 guilhermefarias 的 Cordova Exif 和更广泛的 API.
为了@Shree 的乐趣,直接从 repo 中获取
完整示例 这个例子展示了如何简单的获取智能手机拍摄的照片的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);