Interpretieren Sie XMP-Metadaten in ALAssetRepresentation
Wenn ein Benutzer einige Änderungen (Zuschneiden, Entfernen roter Augen, ...) an den Fotos in der integrierten Funktion vornimmtPhotos.app Unter iOS werden die Änderungen nicht auf die angewendetfullResolutionImage
vom entsprechenden zurückgegebenALAssetRepresentation
.
Die Änderungen werden jedoch auf die angewendetthumbnail
und dasfullScreenImage
zurückgegeben von derALAssetRepresentation
. Informationen zu den vorgenommenen Änderungen finden Sie imALAssetRepresentation
's Metadaten-Wörterbuch über den Schlüssel@"AdjustmentXMP"
.
Ich möchte diese Änderungen auf die anwendenfullResolutionImage
mich, um die Konsistenz zu bewahren. Ich habe das am herausgefundeniOS6 + CIFilter
'sfilterArrayFromSerializedXMP: inputImageExtent:error:
kann diese XMP-Metadaten in ein Array von konvertierenCIFilter
s:
ALAssetRepresentation *rep;
NSString *xmpString = rep.metadata[@"AdjustmentXMP"];
NSData *xmpData = [xmpString dataUsingEncoding:NSUTF8StringEncoding];
CIImage *image = [CIImage imageWithCGImage:rep.fullResolutionImage];
NSError *error = nil;
NSArray *filterArray = [CIFilter filterArrayFromSerializedXMP:xmpData
inputImageExtent:image.extent
error:&error];
if (error) {
NSLog(@"Error during CIFilter creation: %@", [error localizedDescription]);
}
CIContext *context = [CIContext contextWithOptions:nil];
for (CIFilter *filter in filterArray) {
[filter setValue:image forKey:kCIInputImageKey];
image = [filter outputImage];
}
Dies funktioniert jedoch nur bei einigen Filtern (Zuschneiden, automatische Verbesserung), bei anderen Filtern jedoch nicht, z. B. bei der Entfernung roter Augen. In diesen Fällen kann dieCIFilter
s haben keine sichtbare Wirkung. Daher meine Fragen:
CIFilter
? (In gewisser Weise im Einklang mit der Photos.app. Der Filter mit dem SchlüsselkCIImageAutoAdjustRedEye
ist nicht genug. Zum Beispiel werden keine Parameter für die Position der Augen benötigt.)Gibt es eine Möglichkeit, diese Filter unter iOS 5 zu generieren und anzuwenden?