Odczytywanie danych GPS z obrazu zwróconego przez aparat w telefonie iOS
Muszę uzyskać współrzędne GPS obrazu zrobionego aparatem urządzenia z systemem iOS. Nie obchodzą mnie obrazy z rolki aparatu, tylko obraz zrobiony za pomocą UIImagePickerControllerSourceTypeCamera.
Przeczytałem wiele odpowiedzi na temat stackoverflow, takich jakUzyskaj dane Exif z UIImage - UIImagePickerController, która zakłada, że używasz struktury AssetsLibrary, która nie działa na obrazach z kamer, lub użyj CoreLocaiton, aby uzyskać szerokość / długość geograficzną od samej aplikacji, a nie od obrazu.
Korzystanie z CoreLocationnie jest opcją. To nie da mi współrzędnych po naciśnięciu przycisku migawki. (W przypadku rozwiązań opartych na CoreLocation musisz albo nagrać kable przed wyświetleniem widoku kamery lub później, a oczywiście, jeśli urządzenie porusza się, współrzędne będą nieprawidłowe. Ta metoda powinna działać z urządzeniem stacjonarnym).
Jestem tylko iOS5, więc nie muszę obsługiwać starszych urządzeń. Dotyczy to również produktu komercyjnego, więc nie mogę z niego korzystaćhttp://code.google.com/p/iphone-exif/.
Jakie są więc opcje odczytu danych GPS z obrazu zwróconego przez aparat w iOS5? Jedyne, co mogę teraz pomyśleć, to zapisać obraz w rolce aparatu, a następnie użyć biblioteki AssetsLibrary, ale to wydaje się hokey.
Dzięki!
Oto kod, który napisałem na podstawie odpowiedzi Caleba.
<code> 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); </code>
a moja konsola pokazuje:
<code> 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; }; } </code>
Brak szerokości i długości geograficznej.