Das Seltsamste passiert. Ich habe ein Aktionsblatt, das dem Benutzer die Wahl gibt, entweder ein Foto mit der Kamera zu machen oder eines aus der Kamerarolle auszuwählen. Wenn der UIImagePicker von der Auswahl zurückkehrt, benutze ich die ALAssetsLibrary, um die GPS-Informationen zu bestimmen, die in das Foto eingebettet sind. Die Auswahl eines Fotos aus der Kamerarolle funktioniert einwandfrei und ich kann die GPS-Informationen abrufen. Allerdings macht das Fotografieren mit der Kamera absolut keine GPS-Informationen, tatsächlich habe ich überhaupt keine Metadaten. Weiß jemand was ich hier falsch mache?Das mit der Kamera aufgenommene Foto enthält keine ALAsset-Metadaten
-Code unten:
- (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
Wie ich bereits erklärt, wird die folgende ausgegeben werden, wenn die Kamera verwenden.
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
Allerdings, wenn ich ein vorhandenes Foto, oder Ausfahrt aus dem App wählen, ein neues Foto mit der Kamera nehmen, dann in die App zurück und wählen Sie das Foto aus der Kamera Rolle i folgende Ausgabe von 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 - Ich bin mit xCode 4.3 w/ARC
Ein paar Antworten, die tatsächlich [hier] zur Verfügung arbeiten (http://stackoverflow.com/questions/9766394/get-exif-data-from-uiimage-uiimagepickercontroller) – GreyHands
Ich habe diese Beispiele gefolgt und Ich habe immer noch das gleiche Problem. Könnten Sie Code für mich posten, wenn Sie genau wissen, was mein Problem ist? Danke im Voraus. – ElasticThoughts
Haben Sie die Lokalisierungsdienste aktiviert, wie das Poster der angenommenen Antwort vermuten lässt? Es sieht so aus, dass Sie in einigen Fällen die Metadaten des Standorts selbst hinzufügen müssen. Dies sollte kein Problem sein, wenn Sie die Standortdienste aktiviert haben. –