जब कोई उपयोगकर्ता 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 के तहत इन फिल्टर को उत्पन्न करने और लागू करने की संभावना है?