जब कोई उपयोगकर्ता iOS में अंतर्निहित Photos.app में फ़ोटो में कुछ बदलाव (क्रॉपिंग, रेड-आई रिमूव , ...) करता है , तो परिवर्तन fullResolutionImageसंबंधित द्वारा दिए गए पर लागू नहीं होते हैं ALAssetRepresentation।
हालाँकि, परिवर्तन लागू होते हैं thumbnailऔर fullScreenImageद्वारा लौटा दिए जाते हैं ALAssetRepresentation। इसके अलावा, लागू परिवर्तनों के बारे में जानकारी ALAssetRepresentationकुंजी के माध्यम से मेटाडेटा शब्दकोश में पाई जा सकती है @"AdjustmentXMP"।
मैं 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];
}
हालाँकि, यह केवल कुछ फिल्टर (क्रॉपिंग, ऑटो-एन्हांस) के लिए काम करता है, लेकिन दूसरों के लिए नहीं जैसे कि रेड-आई रिमूवल। इन मामलों में, CIFilterएस का कोई स्पष्ट प्रभाव नहीं है। इसलिए, मेरे सवाल:
- क्या किसी को रेड-आई हटाने का तरीका पता है
CIFilter? (एक तरह से Photos.app के अनुरूप। कुंजी के साथ फ़िल्टरkCIImageAutoAdjustRedEyeपर्याप्त नहीं है। उदाहरण के लिए, यह आंखों की स्थिति के लिए पैरामीटर नहीं लेता है।) - क्या आईओएस 5 के तहत इन फिल्टर को उत्पन्न करने और लागू करने की संभावना है?