Avez-vous pris un coup d'oeil à ce exif iPhone bibliothèque?
http://code.google.com/p/iphone-exif/
Va l'essayer sur mon côté. Je voudrais avoir le GPS (géolocalisation) des coordonnées de l'image qui a été prise avec la UIImagePickerController :/
Après un regard plus profond, cette bibliothèque semble prendre NSData info comme une entrée et le UIImagePickerController renvoie une UIImage après la prise d'un instantané. En théorie, si nous utilisons l'sélectionnés à partir de la UIkit catégorie pour UIImage
NSData * UIImageJPEGRepresentation (
UIImage *image,
CGFloat compressionQuality
);
Alors nous pouvons convertir les UIImage dans un NSData de l'instance et ensuite l'utiliser avec l'iPhone exif de la bibliothèque.
Mise à JOUR:
J'ai fait un test à la bibliothèque mentionné ci-dessus et il semble fonctionner. Toutefois, en raison de mon peu de knwoledge sur le format EXIF et le manque de haut niveau de l'API de la bibliothèque, je n'arrive pas à obtenir les valeurs pour les données EXIF.
Voici mon code au cas où l'un de vous peut aller plus loin :
#import "EXFJpeg.h"
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo {
NSLog(@"image picked %@ with info %@", image, editingInfo);
NSData* jpegData = UIImageJPEGRepresentation (image,0.5);
EXFJpeg* jpegScanner = [[EXFJpeg alloc] init];
[jpegScanner scanImageData: jpegData];
EXFMetaData* exifData = jpegScanner.exifMetaData;
EXFJFIF* jfif = jpegScanner.jfif;
EXFTag* tagDefinition = [exifData tagDefinition: [NSNumber numberWithInt:EXIF_DateTime]];
//EXFTag* latitudeDef = [exifData tagDefinition: [NSNumber numberWithInt:EXIF_GPSLatitude]];
//EXFTag* longitudeDef = [exifData tagDefinition: [NSNumber numberWithInt:EXIF_GPSLongitude]];
id latitudeValue = [exifData tagValue:[NSNumber numberWithInt:EXIF_GPSLatitude]];
id longitudeValue = [exifData tagValue:[NSNumber numberWithInt:EXIF_GPSLongitude]];
id datetime = [exifData tagValue:[NSNumber numberWithInt:EXIF_DateTime]];
id t = [exifData tagValue:[NSNumber numberWithInt:EXIF_Model]];
....
....
La recherche des balises de définition est OK, mais toutes les valeurs de balise renvoie nil
:(
Dans le cas où vous souhaitez donner un essai à la bibliothèque, vous devez définir une variable globale pour le remettre en marche (comme expliqué dans la doc, mais hum.. :/)
BOOL gLogging = FALSE;
Mise à JOUR 2
Réponse ici : iPhone - accéder aux informations de localisation à partir d'une photo
Une UIImage ne pas encapsuler les méta-informations, de sorte que nous sommes coincés : pour sûr, pas EXIF info sera donnée par l'intermédiaire de cette interface.
DERNIÈRE MISE À JOUR
Ok j'ai réussi à le faire fonctionner, au moins pour géolocaliser correctement les images renvoyées par le sélecteur.
Avant le déclenchement de la UIImagePickerController, c'est à vous d'utiliser le CLLocationManager pour récupérer le courant CLocation
Une fois que vous avez cela, vous pouvez utiliser cette méthode qui utilise exif-iPhone bibliothèque de géolocaliser les UIImage de la CLLocation :
-(NSData*) geotagImage:(UIImage*)image withLocation:(CLLocation*)imageLocation {
NSData* jpegData = UIImageJPEGRepresentation(image, 0.8);
EXFJpeg* jpegScanner = [[EXFJpeg alloc] init];
[jpegScanner scanImageData: jpegData];
EXFMetaData* exifMetaData = jpegScanner.exifMetaData;
// end of helper methods
// adding GPS data to the Exif object
NSMutableArray* locArray = [self createLocArray:imageLocation.coordinate.latitude];
EXFGPSLoc* gpsLoc = [[EXFGPSLoc alloc] init];
[self populateGPS: gpsLoc :locArray];
[exifMetaData addTagValue:gpsLoc forKey:[NSNumber numberWithInt:EXIF_GPSLatitude] ];
[gpsLoc release];
[locArray release];
locArray = [self createLocArray:imageLocation.coordinate.longitude];
gpsLoc = [[EXFGPSLoc alloc] init];
[self populateGPS: gpsLoc :locArray];
[exifMetaData addTagValue:gpsLoc forKey:[NSNumber numberWithInt:EXIF_GPSLongitude] ];
[gpsLoc release];
[locArray release];
NSString* ref;
if (imageLocation.coordinate.latitude <0.0)
ref = @"S";
else
ref =@"N";
[exifMetaData addTagValue: ref forKey:[NSNumber numberWithInt:EXIF_GPSLatitudeRef] ];
if (imageLocation.coordinate.longitude <0.0)
ref = @"W";
else
ref =@"E";
[exifMetaData addTagValue: ref forKey:[NSNumber numberWithInt:EXIF_GPSLongitudeRef] ];
NSMutableData* taggedJpegData = [[NSMutableData alloc] init];
[jpegScanner populateImageData:taggedJpegData];
[jpegScanner release];
return [taggedJpegData autorelease];
}