এক্সএএমপি-মেটাডেটা ALAssetRepiversityation এ ব্যাখ্যা করুন


95

যখন কোনও ব্যবহারকারী আইওএস -এ অন্তর্নির্মিত ফটো.এপ -এর ফটোতে কিছু পরিবর্তন (ক্রপিং, লাল চোখের মুছে ফেলা, ...) করেন , তখন পরিবর্তনগুলি fullResolutionImageসংশ্লিষ্ট দ্বারা ফিরিয়ে নেওয়া হয় না ALAssetRepresentation

যাইহোক, পরিবর্তনগুলি প্রয়োগ হয় thumbnailএবং fullScreenImageদ্বারা প্রত্যাবর্তিত হয় ALAssetRepresentation। তদ্ব্যতীত, প্রয়োগকৃত পরিবর্তনগুলি সম্পর্কিত ALAssetRepresentationকীগুলির মাধ্যমে মেটাডেটা অভিধানে পাওয়া যাবে @"AdjustmentXMP"

fullResolutionImageধারাবাহিকতা রক্ষার জন্য আমি নিজের মধ্যে এই পরিবর্তনগুলি প্রয়োগ করতে চাই । আমি জানতে পেরেছি যে iOS6 + CIFilter এর মাধ্যমে filterArrayFromSerializedXMP: inputImageExtent:error:এই এক্সএমপি-মেটাডেটা'র অ্যারে রূপান্তর করতে পারে 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? (একরকমভাবে ফটোস্যাপের সাথে সামঞ্জস্যপূর্ণ। কী দিয়ে ফিল্টারটি kCIImageAutoAdjustRedEyeযথেষ্ট নয় Eg উদাহরণস্বরূপ, এটি চোখের অবস্থানের জন্য প্যারামিটার নেয় না))
  • আইওএস 5 এর অধীনে এই ফিল্টারগুলি তৈরি এবং প্রয়োগ করার কোনও সম্ভাবনা আছে কি?

এই লিঙ্কটি অন্য স্ট্যাকওভারফ্লো প্রশ্নের জন্য যা লাল চোখের জন্য একটি অ্যালগরিদম সরবরাহ করে। এটি খুব বেশি নয় তবে এটি একটি শুরু। stackoverflow.com/questions/133675/red-eye-reduction-algorithm
Roecrew

আইওএস On-তে সঠিকভাবে তালিকাভুক্ত কোডটি লাল-চোখের অপসারণ ফিল্টার প্রয়োগ করে (সিআইআরআইডিয়েইকরিওকশনস অভ্যন্তরীণ ফিল্টার)।
পাইভ

উত্তর:


2
ALAssetRepresentation* representation = [[self assetAtIndex:index] defaultRepresentation];

// Create a buffer to hold the data for the asset's image
uint8_t *buffer = (Byte*)malloc(representation.size); // Copy the data from the asset into the buffer
NSUInteger length = [representation getBytes:buffer fromOffset: 0.0  length:representation.size error:nil];

if (length==0)
    return nil;

// Convert the buffer into a NSData object, and free the buffer after.

NSData *adata = [[NSData alloc] initWithBytesNoCopy:buffer length:representation.size freeWhenDone:YES];

// Set up a dictionary with a UTI hint. The UTI hint identifies the type
// of image we are dealing with (that is, a jpeg, png, or a possible
// RAW file).

// Specify the source hint.

NSDictionary* sourceOptionsDict = [NSDictionary dictionaryWithObjectsAndKeys:

(id)[representation UTI], kCGImageSourceTypeIdentifierHint, nil];

// Create a CGImageSource with the NSData. A image source can
// contain x number of thumbnails and full images.

CGImageSourceRef sourceRef = CGImageSourceCreateWithData((CFDataRef) adata,  (CFDictionaryRef) sourceOptionsDict);

[adata release];

CFDictionaryRef imagePropertiesDictionary;

// Get a copy of the image properties from the CGImageSourceRef.

imagePropertiesDictionary = CGImageSourceCopyPropertiesAtIndex(sourceRef,0, NULL);

CFNumberRef imageWidth = (CFNumberRef)CFDictionaryGetValue(imagePropertiesDictionary, kCGImagePropertyPixelWidth);

CFNumberRef imageHeight = (CFNumberRef)CFDictionaryGetValue(imagePropertiesDictionary, kCGImagePropertyPixelHeight);

int w = 0;

int h = 0;

CFNumberGetValue(imageWidth, kCFNumberIntType, &w);

CFNumberGetValue(imageHeight, kCFNumberIntType, &h);

// Clean up memory

CFRelease(imagePropertiesDictionary);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.