Lorsqu'un utilisateur apporte des modifications (recadrage, la suppression des yeux rouges, ...) pour des photos dans le haut- Photos.app sur iOS, les modifications ne sont pas appliquées à l' fullResolutionImage
retournée par la correspondante ALAssetRepresentation
.
Toutefois, les modifications sont appliquées à l' thumbnail
et de la fullScreenImage
retournée par l' ALAssetRepresentation
.
En outre, des informations sur les modifications effectuées peuvent être trouvés dans l' ALAssetRepresentation
s'dictionnaire de métadonnées via la clé @"AdjustmentXMP"
.
Je voudrais appliquer ces modifications à l' fullResolutionImage
moi-même afin de préserver la cohérence. J'ai trouvé que sur iOS6+ CIFilter
s' filterArrayFromSerializedXMP: inputImageExtent:error:
pouvez convertir cette XMP-métadonnées à un tableau d' 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];
}
Toutefois, cela ne fonctionne que pour certains filtres (recadrage, amélioration automatique) mais pas pour d'autres, comme la suppression des yeux rouges. Dans ces cas, l' CIFilter
s n'ont aucun effet visible. Donc, mes questions:
- Quelqu'un est-il au courant d'une façon de créer de la suppression des yeux rouges
CIFilter
? (D'une manière cohérente avec les Photos.app. Le filtre avec la touchekCIImageAutoAdjustRedEye
n'est pas suffisant. E. g., il ne prend pas de paramètres pour la position des yeux.) - Est-il possible de générer et d'appliquer ces filtres sous iOS 5?