2016-05-04 18 views
0

In Photos.app auf OS X habe ich einen Titel, Schlüsselwörter und eine Beschreibung auf einem Foto in meiner Bibliothek angegeben. Unter iOS habe ich ein PHAsset mit den normalen Abrufmethoden abgerufen.CGImageSourceCopyPropertiesAtIndex gibt keine Schlüsselwörter und andere Photos.app Felder zurück

Dann mit CGImageSourceCopyPropertiesAtIndex, holte ich die Metadaten für das Foto. Die Metadaten sind korrekt (es enthält alle GPS- und EXIF-Daten), enthält jedoch keine dieser benutzerdefinierten Felder.

Die Schlüsselwörter und andere Felder sind definitiv auf dem Gerät, wie ich Photos.app auf iOS durch diese Felder suchen kann und das Foto gefunden wird.

Gibt es eine andere Möglichkeit, auf diese Felder zuzugreifen, oder vielleicht gibt es einen Fehler mit CGImageSourceCopyPropertiesAtIndex?

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

Antwort

3

Das Info in der Datenbank der Fotos App auf dem Gerät (das mit Fotos auf OS X synchronisiert), nicht in den einzelnen Mediendateien eingebettet. Es gibt keine öffentliche API für die Abfrage dieser Felder im Photos-Framework - klingt nach einer guten Sache zu file a bug über.

1

Es ist ein Fehler in CGImageSourceCopyPropertiesAtIndex nach iOS 11 Update

Ich habe auch das gleiche Problem. Meine App funktionierte in iOS 10.3.3 und nach dem Update auf iOS 11 kann ich die Metadateninformationen (Beschreibungsfeld) einer PNG-Datei nicht mit der CGImageSourceCopyPropertiesAtIndex-Funktion abrufen. Das Beschreibungsfeld der Metadaten (PNG-Datei) ist leer. Ich habe den Fehler bereits zu Apple gemeldet, aber ich habe seit dem 27. September nicht geantwortet.

Der folgende Code funktioniert auf iOS 10.3.3 (nicht in der Arbeit iOS 11, iOS 11.0.1, iOS 11.0.2, iOS 11.0.3, iOS 11.1, ... iOS 11.2)

NSString pngFile = @ "Demo.PNG" // Demo.PNG = jede PNG-Datei mit Beschreibung

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); 
} 

(siehe Details in https://forums.developer.apple.com/thread/90958)

+1

Bitte erläutern mehr statt einfach einen Link. Wenn die Verbindung nicht mehr funktioniert, ist Ihre Antwort nutzlos – Ibo

+0

Lieber lbo Danke! Ich habe meine vorherige Antwort bearbeitet. –