ユーザーがiOSの組み込みPhotos.appで写真にいくつかの変更(トリミング、赤目除去など)を行った場合、変更は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
目に見える効果はありません。したがって、私の質問:
- 赤目除去を作成する方法を知っている人はい
CIFilter
ますか?(Photos.appと一貫性があります。キーを持つフィルターkCIImageAutoAdjustRedEye
は十分ではありません。たとえば、目の位置のパラメーターを受け取りません。) - iOS 5でこれらのフィルターを生成して適用する可能性はありますか?
このリンクは、赤目アルゴリズムを提供する別のStackoverflow質問へのリンクです。それは多くはありませんが、それは始まりです。stackoverflow.com/questions/133675/red-eye-reduction-algorithm
—
Roecrew
iOS 7では、リストされているコードは赤目除去フィルター(CIRedEyeCorrections内部フィルター)を正しく適用します。
—
paiv 14年