Quando un utente apporta alcune modifiche (ritaglio, rimozione occhi rossi, ...) alle foto nell'app Photos.app integrata su iOS, le modifiche non vengono applicate al fullResolutionImagerestituito dal file ALAssetRepresentation.
Tuttavia, le modifiche vengono applicate a thumbnaile fullScreenImagerestituite da ALAssetRepresentation. Inoltre, le informazioni sulle modifiche applicate possono essere trovate nel ALAssetRepresentationdizionario dei metadati di tramite la chiave @"AdjustmentXMP".
Vorrei applicare queste modifiche al fullResolutionImageme stesso per preservare la coerenza. Ho scoperto che su iOS6 + CIFilter è filterArrayFromSerializedXMP: inputImageExtent:error:possibile convertire questi metadati XMP in un array di CIFilter:
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];
}
Tuttavia, questo funziona solo per alcuni filtri (ritaglio, miglioramento automatico) ma non per altri come la rimozione degli occhi rossi. In questi casi, le CIFilters non hanno alcun effetto visibile. Pertanto, le mie domande:
- Qualcuno è a conoscenza di un modo per creare la rimozione degli occhi rossi
CIFilter? (In un modo coerente con Photos.app. Il filtro con la chiavekCIImageAutoAdjustRedEyenon è sufficiente. Ad esempio, non prende parametri per la posizione degli occhi.) - C'è la possibilità di generare e applicare questi filtri con iOS 5?