Lo más extraño está sucediendo. Tengo una hoja de acción que le da al usuario la opción de tomar una foto con la cámara o elegir una del rollo de la cámara. Cuando el UIImagePicker regresa de la selección, uso ALAssetsLibrary para determinar la información del GPS incrustada en la foto. Elegir una foto del carrete de la cámara funciona perfectamente y puedo recuperar la información del GPS. Sin embargo, tomar una foto con la cámara no proporciona absolutamente ninguna información de GPS, de hecho no tengo ningún metadato en absoluto. ¿Alguien sabe lo que estoy haciendo mal aquí?La foto tomada con la cámara no contiene ningún metadato ALAsset
código de abajo:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
if([mediaType isEqualToString:(__bridge NSString *)kUTTypeImage])
{
void (^ALAssetsLibraryAssetForURLResultBlock)(ALAsset *) = ^(ALAsset *asset)
{
// get images metadata
NSDictionary *metadata = asset.defaultRepresentation.metadata;
NSLog(@"Image Meta Data: %@",metadata);
// get coords
CLLocation *location = [asset valueForProperty:ALAssetPropertyLocation];
NSLog(@"coordLat: %f , coordLon: %f", location.coordinate.latitude, location.coordinate.longitude);
// do more here - rest of code snipped to keep this question short
};
NSURL *assetURL = [info objectForKey:UIImagePickerControllerReferenceURL];
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library assetForURL:assetURL
resultBlock:ALAssetsLibraryAssetForURLResultBlock
failureBlock:^(NSError *error)
{
// handle error
}];
// rest of code snipped to keep this question short
Como he explicado, el siguiente se da salida al utilizar la cámara.
2012-04-15 17:58:28.032 MyApp[511:707] Image Meta Data: (null)
2012-04-15 17:58:28.041 MyApp[511:707] coordLat: 0.000000 , coordLon: 0.000000
Sin embargo, si elijo una foto existente, o salir de la aplicación, tomar una foto con la cámara, y luego volver a entrar en la aplicación y selecciona esa foto del rollo de la cámara me sale el siguiente resultado de NSLog.
2012-04-15 17:57:03.286 MyApp[511:707] Image Meta Data: {
ColorModel = RGB;
DPIHeight = 72;
DPIWidth = 72;
Depth = 8;
Orientation = 6;
PixelHeight = 1936;
PixelWidth = 2592;
"{Exif}" = {
ApertureValue = "2.970854";
BrightnessValue = "2.886456";
ColorSpace = 1;
ComponentsConfiguration = (
1,
2,
3,
0
);
DateTimeDigitized = "2012:04:15 17:24:02";
DateTimeOriginal = "2012:04:15 17:24:02";
ExifVersion = (
2,
2,
1
);
ExposureMode = 0;
ExposureProgram = 2;
ExposureTime = "0.06666667";
FNumber = "2.8";
Flash = 24;
FlashPixVersion = (
1,
0
);
FocalLength = "3.85";
ISOSpeedRatings = (
80
);
MeteringMode = 5;
PixelXDimension = 2592;
PixelYDimension = 1936;
SceneCaptureType = 0;
SensingMethod = 2;
Sharpness = 2;
ShutterSpeedValue = "3.9112";
SubjectArea = (
1295,
967,
699,
696
);
WhiteBalance = 0;
};
"{GPS}" = {
Altitude = "14.9281";
AltitudeRef = 0;
ImgDirection = "107.4554";
ImgDirectionRef = T;
Latitude = "32.7366666666667";
LatitudeRef = N;
Longitude = "71.679";
LongitudeRef = W;
TimeStamp = "21:26:20.00";
};
"{TIFF}" = {
DateTime = "2012:04:15 17:24:02";
Make = Apple;
Model = "iPhone 4";
Orientation = 6;
ResolutionUnit = 2;
Software = "5.0.1";
XResolution = 72;
YResolution = 72;
"_YCbCrPositioning" = 1;
};
}
2012-04-15 17:57:03.302 MyApp[511:707] coordLat: 32.7366666666667 , coordLon: -71.679
PS - Estoy usando xCode 4.3 w/ARC
Un par de respuestas que realmente funcionan están disponibles [aquí] (http://stackoverflow.com/questions/9766394/get-exif-data-from-uiimage-uiimagepickercontroller) – GreyHands
he seguido esos ejemplos y Todavía estoy viviendo el mismo problema. ¿Podrías publicar algún código si sabes específicamente cuál es mi problema? Gracias por adelantado. – ElasticThoughts
¿Ha activado servicios de ubicación de servicios de ubicación como sugiere el póster de respuesta aceptada? Parece que, en algunos casos, debe agregar metadatos de ubicación usted mismo. Lo cual no debería ser un problema si tiene activados los servicios de localización. –