Мне нужно получить GPS-координаты изображения, снятого камерой устройства iOS. Меня не интересуют изображения Camera Roll, только изображение, снятое с помощью UIImagePickerControllerSourceTypeCamera.
Я читал много ответов на stackoverflow, например Получить данные Exif из UIImage -UIImagePickerController , которые либо предполагают, что вы используете структуру AssetsLibrary, которая, похоже, не работает с изображениями с камеры, либо используйте CoreLocaiton, чтобы получить широту/долготу из самого приложения, а не из изображения.
Использовать CoreLocation нельзя . Это не даст мне координат, когда была нажата кнопка спуска затвора. (В решениях, основанных на CoreLocation, вам необходимо записывать координаты либо до того, как вы вызовете вид с камеры, либо после, и, конечно, если устройство движется, координаты будут неправильными. Этот метод должен работать со стационарным устройством.)
У меня только iOS5, поэтому мне не нужно поддерживать старые устройства. Это также для коммерческого продукта, поэтому я не могу использовать http://code.google.com/p/iphone-exif/.
Итак, каковы мои варианты чтения данных GPS из изображения, возвращаемого камерой в iOS5? Все, что я могу сейчас придумать, это сохранить изображение в Camera Roll, а затем использовать AssetsLibrary, но это кажется ерундой.
Спасибо!
Вот код, который я написал на основе ответа Калеба.
UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
NSData *jpeg = UIImageJPEGRepresentation(image,1.0);
CGImageSourceRef source ;
source = CGImageSourceCreateWithData((__bridge CFDataRef)jpeg, NULL);
NSDictionary *metadataNew = (__bridge NSDictionary *) CGImageSourceCopyPropertiesAtIndex(source,0,NULL);
NSLog(@"%@",metadataNew);
и моя консоль показывает:
2012-04-26 14:15:37:137 ferret[2060:1799] {
ColorModel = RGB;
Depth = 8;
Orientation = 6;
PixelHeight = 1936;
PixelWidth = 2592;
"{Exif}" = {
ColorSpace = 1;
PixelXDimension = 2592;
PixelYDimension = 1936;
};
"{JFIF}" = {
DensityUnit = 0;
JFIFVersion = (
1,
1
);
XDensity = 1;
YDensity = 1;
};
"{TIFF}" = {
Orientation = 6;
};
}
Нет широты/долготы.