3

私がやろうとしていること(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 を使用できます)、それとも単に考えているだけの問題なのか (最後だと思います) はわかりません。

ニック

4

1 に答える 1

1

何かを投稿してから答えを見つけるのが嫌いではありませんか....

これに対処する方法は、次を使用することです。

// grab the original unique icon
NSImage *theicon = [[NSWorkspace sharedWorkspace] iconForFile:full_file_path_of_original]];

// add it to the file after you have saved
BOOL done = [[NSWorkspace sharedWorkspace] setIcon:theicon forFile:full_file_path_to_new_file options:NSExcludeQuickDrawElementsIconCreationOption];

どっ!

于 2010-05-20T10:55:37.477 に答える