2009-09-28 6 views
0

Un lien ou un peu de code serait très apprécié!Géo-tagging une photo sur l'iPhone?

J'ai une application qui permet aux utilisateurs de prendre des photos. Voici le code que j'utilise pour créer le fichier jpeg.

Comment puis-je ajouter un géo-tag aux données EXIF ​​de la photo, en supposant que les informations sur les paramètres ont un lat et un lon?

- (void) saveImage:(NSDictionary*) info { 

    NSFileManager *fileManager = [NSFileManager defaultManager]; 

    NSString *filePath = [self applicationDocumentsDirectory] 
    stringByAppendingString: @"/photos/"]; 
    [fileManager createDirectoryAtPath: filePath withIntermediateDirectories: NO attributes: nil error: nil]; 

    filePath = [filePath stringByAppendingString: [info objectForKey: @"title"]]; 
    filePath = [filePath stringByAppendingString: @".jpg"]; 
    [fileManager createFileAtPath:filePath contents:nil attributes:nil]; 
    NSFileHandle *fileHandle = [NSFileHandle fileHandleForWritingAtPath:filePath]; 

    NSData * imgData = [[NSData alloc] initWithData: 
    UIImageJPEGRepresentation([info objectForKey: @"image"],.8)]; 

    [fileHandle writeData:imgData]; 
    [fileHandle closeFile]; 
    [imgData release]; 

} 
+0

Est-ce pas l'appareil photo iPhone faire pour vous? Toutes mes photos viennent à Flickr avec les données de localisation déjà peuplées ... – ceejayoz

+0

êtes-vous en train d'essayer de le faire avec des photos non prises sur l'iPhone (photos de la bibliothèque)? –

Répondre

2

les photos iPhone sont automatiquement géolocalisées au format JPEG EXIF ​​

1

L'iPhone ne propose pas actuellement la bibliothèque ImageIO qui peut être utilisé pour cela sur le Mac. Jetez un oeil sur le projet iphone-exif, il pourrait fournir ce dont vous avez besoin.

En outre, quelques notes sur votre code, si je peux.

  • NSString a many path methods que vous devez utiliser pour rendre votre intention plus claire lors de la gestion des chemins.
  • UIImageJPEGRepresentation renvoie déjà une instance NSData autoreleased. C'est une erreur courante pour les débutants, mais vous gaspillez du code et ajoutez du travail supplémentaire de gestion de la mémoire en créant une nouvelle instance NSData avec l'ancienne.
  • NSData a une méthode -writeToFile: options: error: qui vous permettra de vous débarrasser de tout ce code NSFileHandle supplémentaire. Je pense que cela vous évitera aussi d'avoir à créer le fichier avec NSFileManager en premier.
  • Sinon, vous pouvez transmettre les données de UIImageJPEGRepresentation dans le paramètre contenu - [NSFileManager createFileAtPath: Contenu: Attributs:]
Questions connexes