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 信息,因为我将其用于单独分配。您应该使用 guilhermefariasCordova 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);