Коли користувач вносить деякі зміни (обрізання, видалення ефекту червоних очей, ...) до фотографій у вбудованому 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];
}
Однак це працює лише для деяких фільтрів (обрізання, автоматичне покращення), але не для інших, таких як видалення ефекту червоних очей. У цих випадках CIFilter
s не мають видимого ефекту. Тому мої запитання:
- Хтось знає про спосіб створення ефекту червоних очей
CIFilter
? (Певним чином, що відповідає Photos.app. Фільтру з ключемkCIImageAutoAdjustRedEye
недостатньо. Наприклад, він не приймає параметрів для положення очей.) - Чи є можливість генерувати та застосовувати ці фільтри під iOS 5?