Что я пытаюсь сделать (до 10.6) ....
У меня есть изображение (jpeg), которое включает значок в файле изображения (то есть вы видите значок, основанный на изображении в файле, в отличие от общего значка jpeg в диалоговых окнах открытия файлов в программе). Я хочу отредактировать метаданные exif, сохранить их обратно в изображение в новом файле. В идеале я хотел бы сохранить его обратно в точную копию файла (т.е. сохранить любые созданные встроенные значки и т. Д.), Однако в моих руках значок потерян.
Мой код (некоторые биты удалены для удобства чтения):
// set up source ref I THINK THE PROBLEM IS HERE - NOT GRABBING THE INITIAL DATA
CGImageSourceRef source = CGImageSourceCreateWithURL( (CFURLRef) URL,NULL);
// snag metadata
NSDictionary *metadata = (NSDictionary *) CGImageSourceCopyPropertiesAtIndex(source,0,NULL);
// make metadata mutable
NSMutableDictionary *metadataAsMutable = [[metadata mutableCopy] autorelease];
// grab exif
NSMutableDictionary *EXIFDictionary = [[[metadata objectForKey:(NSString *)kCGImagePropertyExifDictionary] mutableCopy] autorelease];
<< edit exif >>
// add back edited exif
[metadataAsMutable setObject:EXIFDictionary forKey:(NSString *)kCGImagePropertyExifDictionary];
// get source type
CFStringRef UTI = CGImageSourceGetType(source);
// set up write data
NSMutableData *data = [NSMutableData data];
CGImageDestinationRef destination = CGImageDestinationCreateWithData((CFMutableDataRef)data,UTI,1,NULL);
//add the image plus modified metadata PROBLEM HERE? NOT ADDING THE ICON
CGImageDestinationAddImageFromSource(destination,source,0, (CFDictionaryRef) metadataAsMutable);
// write to data
BOOL success = NO;
success = CGImageDestinationFinalize(destination);
// save data to disk
[data writeToURL:saveURL atomically:YES];
//cleanup
CFRelease(destination);
CFRelease(source);
Я не знаю, действительно ли это вопрос обработки изображений, обработки файлов, обработки после сохранения (я мог бы использовать sip), или я просто думаю (я подозреваю, что последний).
Ник