[ios] Interpretare i metadati XMP in ALssetRepresentation



Answers

Question

Quando un utente apporta alcune modifiche (ritaglio, rimozione dell'effetto occhi rossi, ...) alle foto nel Photos.app integrato su iOS, le modifiche non vengono applicate a fullResolutionImage restituito dalla corrispondente ALAssetRepresentation .

Tuttavia, le modifiche vengono applicate alla thumbnail e a fullScreenImage restituito da ALAssetRepresentation . Inoltre, le informazioni sulle modifiche applicate sono disponibili nel ALAssetRepresentation dei metadati di ALAssetRepresentation tramite la chiave @"AdjustmentXMP" .

Vorrei applicare queste modifiche a fullResolutionImage per preservare la coerenza. Ho scoperto che su iOS6 + CIFilter filterArrayFromSerializedXMP: inputImageExtent:error: puoi convertire questo 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, auto-miglioramento) ma non per altri come la rimozione dell'effetto occhi rossi. In questi casi, i CIFilter non hanno alcun effetto visibile. Pertanto, le mie domande:

  • Qualcuno è a conoscenza di un modo per creare CIFilter rimozione occhi CIFilter ? (In modo coerente con Photos.app Il filtro con la chiave kCIImageAutoAdjustRedEye non è sufficiente, ad esempio non prende parametri per la posizione degli occhi.)
  • C'è la possibilità di generare e applicare questi filtri su iOS 5?



Related