2010-10-21 27 views
6

Est-il possible d'accéder aux métadonnées d'une image capturée par UIImagePickerController dans iOS? Je comprends que cela peut être fait avec l'infrastructure AssetLibrary pour les images capturées par l'application caméra (ou autrement présent dans la photothèque iPhone), mais un développeur peut accéder à l'une des métadonnées/info exif depuis une application juste après qu'un utilisateur a pris image? Je suis à la recherche de tout type d'information sur le niveau d'exposition d'une photo après qu'elle a été prise. Merci!Accès aux métadonnées (tags exif) de l'image prise par UIImagePickerController - iOS/iPhone

+0

Exif est un élément de données au format tiff contenu dans un marqueur JPEG. Donc, si vous avez accès au fichier image brut, vous pouvez l'analyser et le lire. –

Répondre

5

Apparemment, vous pouvez accéder aux métadonnées d'une image juste après qu'elle a été prise. La méthode de protocole qui est appelé par le système après une image a été sélectionnée est:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 

L'argument NSDictionary, info, contient une clé: UIImagePickerControllerMediaMetadata

Maintenant, si je peux comprendre comment obtenir le exif étiquettes ou toute information de niveau d'exposition de cela pour inférer des informations de base sur le niveau de lumière, je serai heureux. :)

+0

Vous pouvez utiliser un CLLocationManager pour obtenir l'emplacement actuel et le géomarquer. – nonamelive

+1

Notez qu'il ne fonctionne que lorsque vous capturez une image de la caméra et utilisez UIImagePickerController. –

0

mis à jour pour iOS 11 avec des photos cadre

Objectif - C:

#import <Photos/Photos.h> 

- (void)imagePickerController:(UIImagePickerController *)imagePicker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info { 

    PHAsset* asset = info[UIImagePickerControllerPHAsset]; 

    [asset requestContentEditingInputWithOptions:nil completionHandler:^(PHContentEditingInput *contentEditingInput, NSDictionary *info) { 
     CIImage *fullImage = [CIImage imageWithContentsOfURL:contentEditingInput.fullSizeImageURL]; 

     NSLog(@"%@", fullImage.properties.description); 
    }]; 

    [imagePicker dismissViewControllerAnimated:YES completion:nil]; 
} 

Vous devez également l'autorisation de la bibliothèque photo Utilisation (NSPhotoLibraryUsageDescription) et peut ajouter le code suivant à Affichage de la charge ou de l'affichage

[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) { 
    switch (status) { 
     case PHAuthorizationStatusAuthorized: 
      NSLog(@"PHAuthorizationStatusAuthorized"); 
      break; 
     case PHAuthorizationStatusDenied: 
      NSLog(@"PHAuthorizationStatusDenied"); 
      break; 
     case PHAuthorizationStatusNotDetermined: 
      NSLog(@"PHAuthorizationStatusNotDetermined"); 
      break; 
     case PHAuthorizationStatusRestricted: 
      NSLog(@"PHAuthorizationStatusRestricted"); 
      break; 
    } 
}];