Wie behalte ich Original-Metadaten bei der Bearbeitung von PHAssets?

8

Ich bearbeite Fotos über PhotoKit, aber ich habe festgestellt, dass dadurch die Metadaten des ursprünglichen Fotos nicht erhalten bleiben. Dies tritt auch bei der von Apple bereitgestellten SamplePhotosApp auf, wenn Sepia- oder Chrome-Filter angewendet werden. Meine Frage ist, wie stellen Sie sicher, dass alle ursprünglichen Foto-Metadaten erhalten bleiben?

Ich habe herausgefunden, wie Sie die Metadaten des Originalbilds erhalten können, und ich konnte diese Metadaten in der endgültigen CIImage speichern, die ich erstelle, aber sie wird trotzdem entfernt, wenn die Bearbeitung festgeschrieben wird. Es muss ein Problem bei der Art und Weise geben, wie ich CIImage in ein CGImage in ein UIImage in NSData umwandle oder wie ich es auf die Festplatte schreibe.

%Vor%

Original - beachten Sie die Registerkarte GPS:

Nach dem Bearbeiten des Fotos:

    
Joey 07.09.2014, 22:18
quelle

2 Antworten

4

Laut Apple-Dokument für die CImage.properties:

  

Wenn das CIllage-Objekt die Ausgabe eines Filters (oder einer Filterkette) ist, gibt diese Methode die Metadaten aus dem ursprünglichen Eingabebild des Filters zurück.

Wenn ich das gesagt habe, würde ich das machen, wenn die Dokumentation nicht korrekt ist.

Sie müssen die Eigenschaften selbst speichern. Dazu müssen Sie den Inhalt der URL als NSData lesen %Vor%

Wenn Sie die Metadaten nicht ändern müssen, müssen Sie CFDataRef nicht in ein NSDictionary * umwandeln, aber ich habe hier nur der Vollständigkeit halber angegeben.

    
Bradley M Handy 22.09.2014 01:14
quelle
4

Während dies in Objective-C möglich war, wie Bradley zeigte, funktionierte es in Swift nicht korrekt und würde dazu führen, dass der Block performChanges fehlschlug (siehe mein andere Frage ). Dies wurde in den neuesten Versionen behoben - Swift 1.2 in Xcode 6.3. Um die Metadaten zu bewahren, ist es so einfach:

%Vor%

Oder für Objective-C:

%Vor%

BEARBEITEN: Während dies im iOS-Simulator funktioniert, funktionierte es auf einem echten Gerät, auf dem der Swift-Code läuft, nicht.

    
Joey 04.05.2015 16:04
quelle

Tags und Links