【发布时间】:2012-10-29 14:13:30
【问题描述】:
当用户对 iOS 内置 Photos.app 中的照片进行一些更改(裁剪、消除红眼等)时,这些更改不会应用到 @987654322 @ 由对应的ALAssetRepresentation 返回。
但是,更改将应用于thumbnail 和ALAssetRepresentation 返回的fullScreenImage。
此外,可以通过键 @"AdjustmentXMP" 在 ALAssetRepresentation 的元数据字典中找到有关已应用更改的信息。
我想自己将这些更改应用到fullResolutionImage 以保持一致性。我发现在 iOS6+ 上 CIFilter 的 filterArrayFromSerializedXMP: 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];
}
但是,这仅适用于某些滤镜(裁剪、自动增强),但不适用于其他滤镜,例如去除红眼。在这些情况下,CIFilters 没有明显的效果。因此,我的问题:
- 有谁知道消除红眼的方法
CIFilter? (以与Photos.app一致的方式。带有kCIImageAutoAdjustRedEye键的过滤器是不够的。例如,它不接受眼睛位置的参数。) - 是否有可能在 iOS 5 下生成和应用这些过滤器?
【问题讨论】:
-
此链接指向另一个提供红眼算法的 Stackoverflow 问题。这不是很多,但它是一个开始。 stackoverflow.com/questions/133675/red-eye-reduction-algorithm
-
在 iOS 7 上,正确列出的代码应用了红眼消除过滤器(CIRedEyeCorrections 内部过滤器)。
标签: ios ios6 alassetslibrary cifilter ciimage