Foto mit Kamera enthält keine Metadaten ALAsset

Die seltsamsten Dinge geschehen. Ich habe ein action-Blatt gibt dem Benutzer die Wahl, entweder nehmen Sie ein Foto mit der Kamera oder wählen Sie eines aus der camera roll. Auf der UIImagePicker der Rückkehr von der Auswahl verwende ich die ALAssetsLibrary, um zu bestimmen, die GPS-Informationen eingebettet in das Foto. Wählen Sie ein Foto aus der camera roll funktioniert perfekt und ich bin in der Lage zum abrufen der GPS-Informationen. Allerdings, ein Foto mit der Kamera stellt absolut kein GPS-Informationen, in der Tat habe ich keine Metadaten an alle. Weiß jemand, was mache ich hier falsch?

Folgenden Code:

- (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

Als ich erklärte, das folgende wird ausgegeben, wenn Sie 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 wählen Sie ein vorhandenes Foto oder beenden Sie die app, nehmen Sie ein neues Foto mit der Kamera, dann gehen Sie zurück in die app und wählen Sie das Foto aus der Kamera erhalte ich die 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 wirklich funktionieren, sind verfügbar here
  • Ich habe folgte dieser Beispiele und ich bin immer noch Ausgliederung das gleiche Problem. Wären Sie in der Lage zu schreiben einige code für mich, wenn Sie genau wissen, was mein Problem ist? Vielen Dank im Voraus.
  • Haben Sie schalten Sie standortbasierte Dienste standortbasierte Dienste als poster akzeptierte Antwort suggeriert? Es scheint, dass in einigen Fällen müssen Sie auf Ort hinzufügen meta-Daten selbst. Das sollte nicht sein ein problem, wenn man die Ortungsdienste eingeschaltet.
  • Ja, die Ortungsdienste auf und ich ziehen kann, die lat/lon-info aus CLLocaionManager, wenn ich zu Sein, nur seltsam, dass asset.defaultRepresentation.metadata gibt absolut keine Metadaten, wenn Sie die Kamera aber mit den EXAKT selben code auf einem Bild, ausgewählt aus der camera roll zurück-Metadaten. Ich denke, dass bis ich das herausfinden werde ich verwenden, die CLLocation Informationen. Nochmals vielen Dank!
  • Hast du jemals das gelöst? Meine Frage ist so ziemlich das gleiche wie deins (also, wenn Sie eine Antwort haben, dann haben Sie Anspruch auf die bounty...) stackoverflow.com/questions/10302250/...
  • Nicht genau, ich habe zwei Problemumgehungen Arbeit, sowohl von denen, die nicht akzeptabel sind Sie nach der Lektüre Ihrer post. 1) speichern Sie das Foto in der camera roll, dann ziehen Sie es aus und schnappen Sie sich die GPS-info aus den Metadaten. Ich denke, dies ist ein großer hack, damit ich nicht diesen Weg wählen. 2) Starten Sie core-Position zuerst, dann starten Sie die Kamera nach der Aufnahme verwenden Sie die coords zurück von locationManager:didUpdateToLocation:fromLocation. Weder Optionen ist ideal, wenn Sie eine Antwort bekommen auf diese bitte lassen Sie mich wissen. Ich werde überprüfen Sie Ihre post, es scheint, dass Sie ' ve bekommen eine Menge von Ansichten und Reaktionen so weit...
  • Was ist mit der NSDictionary *metadata = [info objectForKey:UIImagePickerControllerMediaMetadata]; im didFinish... im Ort NSDictionary *metadata = asset.defaultRepresentation.metadata;? Geben Sie einen versuchen es 🙂

Schreibe einen Kommentar