2013-02-28 4 views
0

Я пытаюсь сохранить изображение с некоторыми пользовательскими метаданными в фотоальбом. Пользовательские метаданные, которые я хотел бы сохранить, должны быть в виде NSDictionary. До сих пор я только удалось вставив NSArray в метаданные изображения, используя что-то, как показано ниже:Добавить NSDictionary в метаданные изображения

NSMutableDictionary *metadata = [[NSMutableDictionary alloc] init]; 
[metadata setObject:@[@"ele1", @"ele2"] forKey:(NSString*)kCGImagePropertyIPTCKeywords]; 
NSMutableDictionary *meta = [[NSMutableDictionary alloc] init]; 
[meta setObject:metadata forKey:(NSString*)kCGImagePropertyIPTCDictionary]; 
// pass the meta dictionary into writeImageDataToSavedPhotosAlbum 

Но то, что я хотел бы, чтобы передать словарь в SetObject. Неужели кому-нибудь удалось добавить метаданные в изображение, где метаданные являются NSDIctionary?

Дополнительная информация

Я использую код, который я нашел здесь Save CUSTOM metadata in an image taken from AVFoundation in iOS, чтобы добавить словарь метаданных изображения, но до сих пор не повезло. Исходный файл находится во временном каталоге, а окончательный файл создается через writeImageDataToSavedPhotosAlbum. Как и в ссылке, результирующее изображение не содержит словарь. Есть идеи?

CGImageSourceRef source = CGImageSourceCreateWithData((CFMutableDataRef)data, NULL); 
NSDictionary *metadata = [(NSDictionary *) CGImageSourceCopyPropertiesAtIndex(source,0,NULL)autorelease]; 
NSMutableDictionary *metadataAsMutable = [metadata mutableCopy]; 
NSMutableDictionary *RAWDictionary = [[metadataAsMutable objectForKey:(NSString *)kCGImagePropertyRawDictionary]mutableCopy]; 

if(!RAWDictionary) { 
    RAWDictionary = [NSMutableDictionary dictionary]; 
} 

[RAWDictionary setValue:@"value1" forKey:@"key1"]; 
[RAWDictionary setValue:@"value2" forKey:@"key2"]; 

[metadataAsMutable setObject:RAWDictionary forKey:(NSString *)kCGImagePropertyRawDictionary]; 

NSMutableData *newData = [NSMutableData data]; 

CFStringRef UTI = CGImageSourceGetType(source); 
CGImageDestinationRef destination = CGImageDestinationCreateWithData((CFMutableDataRef)newData, UTI, 1, NULL); 

if(!destination) { 
    NSLog(@"***Could not create image destination ***"); 
} 

CGImageDestinationAddImageFromSource(destination,source,0, (CFDictionaryRef)metadataAsMutable); 
BOOL success = NO; 
success = CGImageDestinationFinalize(destination); 

if(!success) { 
    NSLog(@"***Could not create data from image destination ***"); 
} 

ответ

0

Попробуйте это:

//covert image to nsdata format 
NSData *imageData = [[NSData alloc]initWithContentsOfFile:@"your image path"]; 
NSMutableDictionary *metadata = [[NSMutableDictionary alloc] init]; 
[metadata setObject:imageData forKey:@"imageData"]; 
+0

Thanks..but это не сработало. Я добавил дополнительную информацию к моему первоначальному вопросу. – Glauco

+0

@ Glauco, что значит, не работает ?? вы могли бы попытаться заархивировать свои данные? как NSData * data = [NSKeyeArchiver archivedDataWithRootObject: «ваши данные»]; – Allan

+0

Моя идея состояла в том, чтобы добавить метаданные в изображение. Затем объединенное изображение сохраняется через ALAssetLibrary в фотоальбом. Затем, в более позднее время, ALAssetLibrary будет получать изображения в альбоме. Именно в этот момент я хотел бы получить пользовательские метаданные, сохраненные в начале. Я не знаю, как NSKeyeArchiver мне поможет. У вас есть пример? или вы могли бы предоставить дополнительную информацию? – Glauco

Смежные вопросы