iconutil
을 사용하려는 경우이를 수행 할 수 있습니다. 적어도 내 10.9.5 시스템에서는 기본 OS의 일부입니다. 개발자 도구와 같이 특별한 설치가 아닙니다. 다음을 사용하여 확인할 수 있습니다 :
pkgutil --file-info /usr/bin/iconutil
을 여기에, 그 출력 :
volume:/
path: /usr/bin/iconutil
pkgid: com.apple.pkg.BSD
pkg-version: 10.9.0.1.1.1306847324
install-time: 1402788942
uid: 0
gid: 0
mode: 755
중요한 부분은 pkgid입니다. 이것은 기본 OS의 일부인 BSD 패키지의 일부입니다.
그렇긴하지만 이렇게하기 위해 약간의 코드를 작성하는 것이 어렵지 않습니다.
CGDestination API를 사용할 수 있습니다. CGImageDestinationCreateWithURL()
을 사용하여 대상을 만듭니다. type
의 경우 kUTTypeAppleICNS
을 전달하십시오.
개별 파일의 이미지를 추가하려는 경우 CGImageSourceCreateWithURL()
을 사용하여 각각에 대해 CGImageSource
을 만드는 것이 가장 쉽습니다. 그런 다음 CGImageDestinationAddImageFromSource()
을 사용하여 원본에서 대상으로 직접 이미지를 추가 할 수 있습니다. 이미지를 대상에 추가 한 후에는 각 소스 CFRelease()
을 잊지 마세요.
그런 다음 CGImageDestinationFinalize()
으로 전화를 걸어 목적지로 이미지를 URL에 쓰도록하십시오. 그런 다음 CFRelease()
대상.
각 원본 이미지에 적절한 DPI가 설정되어 있으면 대상으로 그대로 복사됩니다. 원본 이미지에 적절한 DPI 집합이 없으면 속성 사전을 CGImageDestinationAddImageFromSource()
에 전달하여 재정의 할 수 있습니다. kCGImagePropertyDPIHeight
및 kCGImagePropertyDPIWidth
키를 포함하고 각각은 해당 DPI가있는 CFNumber
개체의 해당 값을가집니다. 일반 해상도 아이콘의 경우 72 DPI를 사용하십시오. 고해상도 (@ 2x) 아이콘의 경우 144 DPI를 사용하십시오.
ICNS 파일 만들기는 이전 IconFamily API를 사용하여 수행 할 수도 있지만 약간 털이 있습니다. 또한 고해상도 아이콘을 지원하지 않습니다.
먼저, 사용자가 핸들을 생성 (포인터 - 대 - 포인터로 크기 조정 버퍼) 아이콘 가족 :
이어서
IconFamilyHandle iconFamily = (IconFamilyHandle)NewHandle(0);
각 화상 사이즈 (16, 32, 128, 256, 및 512)를 사용하여 이미지 데이터의 원시 비트 맵에 대한 핸들을 만듭니다. 비트 맵은 픽셀 당 32 비트, 구성 요소 당 8 비트, 패딩이없는 ARGB 사전 순화되지 않은 데이터 여야합니다.
int size = /* 16, 32, 128, 256, or 512 */;
Handle handle = NewHandle(size * size * 4);
// fill handle with image data; buffer pointer is *handle
그런 다음 같은 호출 아이콘 가족이 핸들을 추가
SetIconFamilyData(iconFamily, kIconServices16PixelDataARGB, handle);
을 다른 크기의 경우, 적절한 값으로 kIconServices16PixelDataARGB
에서 "16"를 대체합니다.
그런 다음 아이콘 패밀리 핸들의 데이터를 파일에 씁니다. 핸들 포인터를 역 참조하기 만하면 (즉, *iconFamily
) 데이터 포인터가 생성됩니다. 크기는 GetHandleSize((Handle)iconFamily)
으로 전화하여 얻을 수 있습니다.
DisposeHandle()
을 호출하여 도중에 생성 한 핸들을 삭제합니다.
정말 대단합니다! Ken 감사합니다 !! CoreFoundation 코드를 작성하려고합니다. 어쨌든 OSTX 이후 iconutil을 사용할 수 있는지 알고 있습니까? 이 주제는 여기에 일부 Mac에서 누락 된 것으로 보인다 : [StackOverflow :: iconset 명령 줄 도구 'iconutil'은 어디에 있습니까?] (http://stackoverflow.com/questions/12281309/where-is-the-iconset) -command-line-tool-iconutil-located) – Noitidart
죄송합니다.'iconutil '이 도입 된시기를 모르겠습니다. 그래도 좋은/중요한 관심사입니다. 얼마나 멀리 다시 배포 하시겠습니까? CGImageDestination은 10.6에서 ICNS를 지원하기 시작한 것 같지만 버그였습니다. 그래서, 당신은 단지 10.7에서 사용하려고 노력해야합니다. –
'CGImageDestination'에 대한 중요한 메모를 보았습니다. 나는 OSX> = 10.5에서 지원되는 Firefox 4+를위한 addon에서 이것을 사용하고있다. 혹시 10.5의 CGImageDestination에 대한 해결 방법을 알고 계신가요? – Noitidart