2016-05-04 1 views
0

Dans Photos.app sur OS X J'ai spécifié un titre, des mots-clés et une description sur une photo dans ma bibliothèque. Sur iOS, j'ai récupéré un PHAsset en utilisant les méthodes de récupération normales.CGImageSourceCopyPropertiesAtIndex ne renvoie pas les mots-clés et autres champs Photos.app

Ensuite, en utilisant CGImageSourceCopyPropertiesAtIndex, j'ai récupéré les métadonnées pour la photo. Les métadonnées sont correctes (elles contiennent toutes les données GPS et EXIF), mais elles n'incluent aucun de ces champs personnalisés.

Les mots-clés et d'autres champs sont définitivement sur l'appareil que je peux rechercher Photos.app sur iOS par ces champs et la photo est trouvée.

Y a-t-il un autre moyen d'accéder à ces champs, ou peut-être qu'il y a un bug avec CGImageSourceCopyPropertiesAtIndex?

if let metadata = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, nil) { 
    print(metadata) 
} 

Répondre

3

Qu'Info est dans la base de données de l'application Photos sur l'appareil (qui est synchronisé avec photos sur OS X), non intégrés dans les fichiers multimédias individuels. Il n'y a pas d'API publique pour interroger ces champs dans le cadre Photos - cela ressemble à une bonne chose à propos de file a bug.

1

Il y a un bug dans CGImageSourceCopyPropertiesAtIndex après iOS 11 mise à jour

J'ai aussi le même problème. Mon application a fonctionné dans iOS 10.3.3 et après la mise à jour vers iOS 11, je suis incapable d'obtenir les informations de métadonnées (champ de description) d'un fichier PNG en utilisant la fonction CGImageSourceCopyPropertiesAtIndex. Le champ de description des métadonnées (fichier PNG) est vide. J'ai déjà signalé le bug à Apple mais je n'ai pas de réponse depuis le 27 septembre 2017.

Le code suivant a travaillé sur iOS 10.3.3 (ne fonctionne pas dans iOS 11, iOS 11.0.1, iOS 11.0.2, iOS 11.0.3, iOS 11.1, 11.2 ... iOS)

NSString pngFile = @ "Demo.PNG" // Demo.PNG = un fichier PNG avec la description

CGImageSourceRef imgSrc = CGImageSourceCreateWithURL((__bridge CFURLRef)[NSURL fileURLWithPath:pngFile], NULL); 
NSDictionary *metaDataDict = CFBridgingRelease(CGImageSourceCopyPropertiesAtIndex(imgSrc, 0, nil)); 
if (imgSrc!=nil) { 
    NSDictionary *metaDataDict = (__bridge NSDictionary *)(CGImageSourceCopyPropertiesAtIndex(imgSrc, 0, nil)); 
    // Release imgSrc 
    CFRelease(imgSrc); 
} 

(voir les détails dans https://forums.developer.apple.com/thread/90958)

+1

S'il vous plaît expliquer plus au lieu d'utiliser simplement un lien. Si le lien cesse de fonctionner votre réponse ne sera d'aucune utilité – Ibo

+0

Cher lbo Merci! J'ai édité ma réponse précédente. –