プログラムで 1024x1024 の画像からサイズ 120 * 120 の ICNS を作成しようとしています。現在、NSImage を作成してから、適切な解像度で CGImageRef オブジェクトを作成し、最後に CGImageDestinationAddImage() を使用してパスに保存しています。
さまざまなリンクを調べましたが、そのうちの 1 つは次のとおりです: プログラムで ICNS を作成する:「サポートされていない画像サイズ」
しかし問題は、コードが同じサイズのアイコン ファイルを生成したことです。(1024 * 1024)
コードは次のとおりです。
- (void)generateIconSizeFromImage:(NSString *)path
{
//destination path
NSURL *fileURL = [NSURL fileURLWithPath:@"/Users/harjotsingh/Desktop/TestIconGenerated/test1@2x.png"];
CGImageDestinationRef dr = CGImageDestinationCreateWithURL((__bridge CFURLRef)fileURL, kUTTypePNG , 1, NULL);
//image from path
NSImage *img = [[NSImage alloc] initWithContentsOfFile:path];
//setting its size to one of icon size
[img setSize:NSMakeSize(60,60)];
//setting its rep size to one of icon size
for (NSImageRep *rep in [img representations])[rep setSize:NSMakeSize(60,60)];
//setting the dpi, so it create 120 * 120 size icon file
NSDictionary *imageProps1x = @{
(__bridge NSString *)kCGImagePropertyDPIWidth: @144.0,
(__bridge NSString *)kCGImagePropertyDPIHeight: @144.0,
};
// Add rect size
NSRect prect = NSMakeRect(0,0,60,60);
//get image for desired size
CGImageRef generatedImage = [img CGImageForProposedRect:&prect context:[NSGraphicsContext currentContext] hints:nil];
//sadly it shows the same 1024 * 1024 size
NSLog(@"width:-- %zu && height:-- %zu",CGImageGetWidth(generatedImage),CGImageGetHeight(generatedImage));
//adding to destination folder
CGImageDestinationAddImage(dr, generatedImage, (__bridge CFDictionaryRef)(imageProps1x));
//finalize.
CGImageDestinationFinalize(dr);
CFRelease(dr);
}
入力パスから使用される画像は 1024 * 1024 ピクセルです。「1024 x 1024 ピクセルの要素の正しい仕様は、512 ポイント @ 2x です。これは、(イメージとレップの両方の) サイズ (NSSize){ 512.0, 512.0 } (ポイント) であり、レップは 1024 ピクセル幅です。高さ 1024 ピクセルです。」注: これは対処されていますが、まだ成功していません。