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.
Original - beachten Sie die Registerkarte GPS:
Nach dem Bearbeiten des Fotos:
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 p> 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.
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:
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.