Коли користувач вносить деякі зміни (обрізання, видалення ефекту червоних очей, ...) до фотографій у вбудованому Photos.app на iOS, зміни не застосовуються до fullResolutionImageповернутих відповідним ALAssetRepresentation.
Однак зміни застосовуються до thumbnailі fullScreenImageповертається ALAssetRepresentation. Крім того, інформацію про застосовані зміни можна знайти в ALAssetRepresentationсловнику метаданих 'за допомогою ключа @"AdjustmentXMP".
Я хотів би застосувати ці зміни до fullResolutionImageсебе, щоб зберегти послідовність. Я виявив, що на iOS6 + CIFilter «з filterArrayFromSerializedXMP: inputImageExtent:error:може перетворити цей XMP-метаданих в масив 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];
}
Однак це працює лише для деяких фільтрів (обрізання, автоматичне покращення), але не для інших, таких як видалення ефекту червоних очей. У цих випадках CIFilters не мають видимого ефекту. Тому мої запитання:
- Хтось знає про спосіб створення ефекту червоних очей
CIFilter? (Певним чином, що відповідає Photos.app. Фільтру з ключемkCIImageAutoAdjustRedEyeнедостатньо. Наприклад, він не приймає параметрів для положення очей.) - Чи є можливість генерувати та застосовувати ці фільтри під iOS 5?