Gdy użytkownik wprowadza pewne zmiany (kadrowanie, usuwanie efektu czerwonych oczu, ...) do zdjęć we wbudowanej aplikacji Photos.app w systemie iOS, zmiany nie są stosowane do fullResolutionImagezwracanych przez odpowiedni plikALAssetRepresentation .
Jednak zmiany są stosowane do thumbnaili fullScreenImagezwracane przez ALAssetRepresentation. Ponadto informacje o zastosowanych zmianach można znaleźć w ALAssetRepresentationsłowniku metadanych za pomocą klucza @"AdjustmentXMP".
Chciałbym zastosować te zmiany do fullResolutionImagesiebie, aby zachować spójność. Znalazłem, że na iOS6 + CIFilter „s filterArrayFromSerializedXMP: inputImageExtent:error:można przekonwertować ten XMP-metadane do tablicy CIFilter” 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];
}
Jednak działa to tylko w przypadku niektórych filtrów (kadrowanie, autoregulacja), ale nie w przypadku innych, takich jak usuwanie efektu czerwonych oczu. W takich przypadkach CIFilters nie mają widocznego efektu. Dlatego moje pytania:
- Czy ktoś zna sposób na usuwanie efektu czerwonych oczu
CIFilter? (W pewnym sensie zgodnym z Photos.app. Filtr z kluczemkCIImageAutoAdjustRedEyeto za mało. Np. Nie bierze parametrów dla położenia oczu.) - Czy istnieje możliwość wygenerowania i zastosowania tych filtrów pod iOS 5?