Lorsqu'un utilisateur apporte des modifications (recadrage, suppression des yeux rouges, ...) aux photos dans l'application Photos.app intégrée sur iOS, les modifications ne sont pas appliquées au fichierfullResolutionImage
renvoyé par le correspondant ALAssetRepresentation
.
Toutefois, les modifications sont appliquées au thumbnail
et au fullScreenImage
renvoyé par le ALAssetRepresentation
. De plus, des informations sur les modifications appliquées peuvent être trouvées dans le ALAssetRepresentation
dictionnaire de métadonnées du via la touche @"AdjustmentXMP"
.
Je voudrais appliquer ces changements au fullResolutionImage
moi - même pour préserver la cohérence. J'ai découvert que sur iOS6 + CIFilter
, filterArrayFromSerializedXMP: inputImageExtent:error:
on peut convertir ces métadonnées XMP en un tableau de 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];
}
Cependant, cela ne fonctionne que pour certains filtres (rognage, amélioration automatique) mais pas pour d'autres comme la suppression des yeux rouges. Dans ces cas, les CIFilter
s n'ont aucun effet visible. Par conséquent, mes questions:
- Quelqu'un a-t-il connaissance d'un moyen de supprimer les yeux rouges
CIFilter
? (D'une manière cohérente avec l'application Photos.app. Le filtre avec la clékCIImageAutoAdjustRedEye
ne suffit pas. Par exemple, il ne prend pas de paramètres pour la position des yeux.) - Existe-t-il une possibilité de générer et d'appliquer ces filtres sous iOS 5?