Подтвердить что ты не робот

ALAsset defaultRepresentation fullResolutionImage

У меня проблема с новыми функциями фотоэффектов iOS 7.

У меня в моем приложении фотобиблиотека. Пока я показываю миниатюры фотографий в UICollectionView, я получаю изображения с фильтрами и уже примененными культурами. Есть два метода, которые возвращают "готовые к использованию" изображения:

  • [asset thumbnail]
  • [[asset defaultRepresentation] fullScreenImage]

Наоборот, когда я хочу поделиться полноразмерным изображением, я получаю неизменную фотографию без каких-либо фильтров:

Можно ли получить полноразмерное изображение с соответствующим фильтром?

4b9b3361

Ответ 1

До сих пор я выяснял только один способ получить то, что хочу. Все активы сохраняют свою модификацию (например, фильтры, культуры и т.д.) В словаре метаданных ключом @"AdjustmentXMP". Мы можем интерпретировать эти данные и применять все фильтры к fullResolutionImage, как в этом SO ответ. Вот мое полное решение:

...
ALAssetRepresentation *assetRepresentation = [asset defaultRepresentation];
CGImageRef fullResImage = [assetRepresentation fullResolutionImage];
NSString *adjustment = [[assetRepresentation metadata] objectForKey:@"AdjustmentXMP"];
if (adjustment) {
    NSData *xmpData = [adjustment dataUsingEncoding:NSUTF8StringEncoding];
    CIImage *image = [CIImage imageWithCGImage:fullResImage];

    NSError *error = nil;
    NSArray *filterArray = [CIFilter filterArrayFromSerializedXMP:xmpData
                                                 inputImageExtent:image.extent
                                                            error:&error];
    CIContext *context = [CIContext contextWithOptions:nil];
    if (filterArray && !error) {
        for (CIFilter *filter in filterArray) {
            [filter setValue:image forKey:kCIInputImageKey];
            image = [filter outputImage];
        }
        fullResImage = [context createCGImage:image fromRect:[image extent]];
    }   
}
UIImage *result = [UIImage imageWithCGImage:fullResImage
                                      scale:[assetRepresentation scale]
                                orientation:(UIImageOrientation)[assetRepresentation orientation]];