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

时间:2015-01-09 15:22:36

标签: android angularjs image cordova exif

我正在使用Angularjs开发一个带Cordova 3.6.x的应用程序。一切似乎工作得很好,除了我无法从照片库中拍摄的图像的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
    }]
}

然后在相应的控制器里面我有

myApp.controller('UploadController',[       '$范围',       '图片',       函数($ scope,picture){

    //Picture
    $scope.snapShot = picture;

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

等。

但是我收到以下错误 processMessage失败:错误:TypeError:无法调用未定义的方法'toString' processMessage失败:Stack:TypeError:无法调用未定义的方法'toString' 接下来是堆栈跟踪和一个巨大的字符串,我很确定是base64,即使它不能用于任何base64到图像解码器我在网上试过...

3 个答案:

答案 0 :(得分:3)

你至少对两个插件是正确的:

  • lorinbeer的Cordova Exif实用程序没有Android支持
  • kamilersz'cordova-plugin-exif 仅提供用于设置某些Exif元数据和从设备获取Wi-Fi信息的API。

Cordova Exif by guilhermefarias 似乎真的很有希望,如果你展示你正在尝试的代码,我可能会帮助你。当然,获取Exif并不是不可能的,因为它是实际文件的一部分。只是Cordova的默认相机插件在从图库中选择图像时丢失了Exif。这似乎做得很好(基于我阅读的代码)并记录在案。

然后还可以将图像作为二进制数据读取并应用Exif.js之类的内容来读取Exif。有关如何执行此操作,请参阅用户Richard Nichols的this answer

答案 1 :(得分:0)

kamilersz / cordova-plugin-exif 仅用于从设备获取Wi-Fi信息,因为我将其作为唯一的作业。你应该使用更广泛的API Cordova Exif by guilhermefarias

答案 2 :(得分:0)

直接从仓库中获取@Shree的乐趣

完整示例 此示例说明了如何简单地获取智能手机拍摄的照片的exif信息。

    $objValidation = $objPHPExcel->getActiveSheet()->getCell('G'.$i)->getDataValidation();
    $objValidation->setType( PHPExcel_Cell_DataValidation::TYPE_DATE );
    $objValidation->setErrorStyle( PHPExcel_Cell_DataValidation::STYLE_STOP );
    $objValidation->setAllowBlank(false);
    $objValidation->setShowErrorMessage(true);
    $objValidation->setErrorTitle('Invalid D.O.B');
    $objValidation->setError('Please Enter a valid D.O.B');
    $objValidation->setFormula1('"'.$minDob.'"');
    $objValidation->setFormula2('"'.$maxDob.'"');