[ios] 解释ALAssetRepresentation中的XMP元数据



0 Answers

Question

当用户在iOS上的内置Photos.app中对照片进行一些更改(裁剪,消除红眼...)时,这些更改不会应用到由相应的fullResolutionImage返回的ALAssetRepresentation

但是,这些更改将应用​​于由ALAssetRepresentation返回的thumbnailfullScreenImage 。 此外,有关应用更改的信息可以通过键“ @"AdjustmentXMP"ALAssetRepresentation的元数据字典中找到。

我想将这些更改应用于fullResolutionImage以保持一致性。 我发现iOS6 + CIFilterfilterArrayFromSerializedXMP: inputImageExtent:error:可以将此XMP元数据转换为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];
}

但是,这只适用于某些滤镜(裁剪,自动增强),但不适用于其他人,如红眼消除。 在这些情况下, CIFilter没有可见的效果。 因此,我的问题是:

  • 有没有人知道一种方法来创建红眼消除CIFilter ? (以与Photos.app一致的方式使用键kCIImageAutoAdjustRedEye的过滤器是不够的,例如,它不需要眼睛位置的参数。)
  • 是否有可能在iOS 5下生成并应用这些滤镜?





Related