Saat pengguna membuat beberapa perubahan (memotong, menghilangkan mata merah, ...) pada foto di aplikasi Photos.app di iOS, perubahan tidak diterapkan ke yang fullResolutionImagedikembalikan oleh yang sesuai ALAssetRepresentation.
Namun, perubahan diterapkan ke thumbnaildan fullScreenImagedikembalikan oleh ALAssetRepresentation. Lebih lanjut, informasi tentang perubahan yang diterapkan dapat ditemukan di ALAssetRepresentationkamus metadata melalui kunci @"AdjustmentXMP".
Saya ingin menerapkan perubahan ini pada fullResolutionImagediri saya sendiri untuk menjaga konsistensi. Saya telah menemukan bahwa pada iOS6 + CIFilter 's filterArrayFromSerializedXMP: inputImageExtent:error:dapat mengkonversi ini XMP-metadata ke array 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];
}
Namun, ini hanya berfungsi untuk beberapa filter (memotong, menyempurnakan otomatis), tetapi tidak untuk filter lain seperti penghilangan mata merah. Dalam kasus ini, CIFilters tidak memiliki efek yang terlihat. Karena itu, pertanyaan saya:
- Adakah yang tahu cara membuat penghilang mata merah
CIFilter? (Dalam cara yang konsisten dengan Photos.app. Filter dengan kuncikCIImageAutoAdjustRedEyetidak cukup. Misalnya, tidak mengambil parameter untuk posisi mata.) - Apakah ada kemungkinan untuk membuat dan menerapkan filter ini di iOS 5?