我正在使用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到图像解码器我在网上试过...
答案 0 :(得分:3)
你至少对两个插件是正确的:
但 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.'"');