【问题标题】:Add an NSDictionary to image metadata将 NSDictionary 添加到图像元数据
【发布时间】:2013-02-28 01:38:54
【问题描述】:

我正在尝试将带有一些自定义元数据的图像保存到相册。我想保存的自定义元数据应该是 NSDictionary 的形式。到目前为止,我只成功地使用以下方法将 NSArray 插入到图像元数据中:

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 ***");
}

【问题讨论】:

    标签: ios alassetslibrary assetslibrary


    【解决方案1】:

    试试这个:

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

    【讨论】:

    • 谢谢..但它没有用。我在原来的问题中添加了一些额外的信息。
    • @Glauco 什么意思没用??您可以尝试存档您的数据吗?就像 NSData *data = [NSKeyeArchiver archivedDataWithRootObject:"your data"];
    • 我的想法是将元数据添加到图像中。然后通过 ALAssetLibrary 将合并后的图像存储到相册中。然后,在稍后的时间,ALAssetLibrary 检索相册中的图像。正是在这一点上,我想检索一开始存储的自定义元数据。我不确定 NSKeyeArchiver 会如何帮助我。你有一个例子吗?或者您能提供更多信息吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-18
    • 2011-06-25
    相关资源
    最近更新 更多