我正在使用 Cordova 3.6.x 和 Angularjs 开发一个应用程序。一切似乎都工作正常,除了我无法从照片库中拍摄的图像的 exif 数据中提取日期和位置。
我的目标设备是 Android 4+
从现在起我测试了: -https://github.com/lorinbeer/cordova-exif-utility (不支持 Android :( ) -https://github.com/guilhermefarias/cordova-exif (返回错误,例如“processMessage失败:错误:TypeError:无法调用未定义的方法'toString'”和“processMessage失败:消息:S01 File1189144150”) -https://github.com/kamilersz/cordova-plugin-exif (不明白它是如何工作的)
在网上我读到 Cordova 在返回图像之前会删除所有 exif 数据。这些数据真的无法获取吗?
您能帮我解决这个问题吗?
更新
我将 Angular 与 ngCordova、ui-router 和 https://github.com/guilhermefarias/cordova-exif 一起使用。所以我利用 ui-router 的“解析”功能:
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
$scope.snapShot = picture;
CordovaExif.readData(picture, function(exifObject) {
console.log(exifObject);
});
等等..
但是我收到以下错误 processMessage 失败:错误:TypeError:无法调用未定义的方法“toString” processMessage 失败:堆栈:类型错误:无法调用未定义的方法“toString” 接下来是堆栈跟踪和一个巨大的字符串,我很确定它是 Base64,即使它不能与我在线尝试的任何 Base64 到图像解码器一起使用...
最佳答案
您对至少两个插件的看法是正确的:
- lorinbeer 的 Cordova Exif 实用程序不支持 Android
- kamilersz 的 cordova-plugin-exif 仅具有用于设置某些 Exif 元数据和从设备获取 Wi-Fi 信息的 API。
但是 guilhermefarias 的 Cordova Exif 看起来确实很有前途,如果您展示您正在尝试的代码,我也许可以帮助您。当然,获取 Exif 也不是不可能,因为它是实际文件的一部分。这只是 Cordova 的默认相机插件在从图库中选择图像时会丢失 Exif。这似乎做得很好(基于我读过的代码)并记录在案。
然后也可以将图像读取为二进制数据并应用类似 Exif.js 的内容。读取Exif。请参阅this answer由用户 Richard Nichols 介绍如何执行此操作。
关于android - Cordova 3.6 : how can I extract GPS Exif data from photo library in Android?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27863778/