iconutil을 사용하여 icns 파일을 수동으로 생성하는 방법은 무엇입니까?


106

내 앱의 유효성을 검사 할 때 다음 오류가 발생합니다.

애플리케이션 번들에는 a 512x512512x512@2x이미지 를 모두 포함하는 ICNS 형식의 아이콘이 없습니다 .

나는 Img2icns 앱으로 icns 아이콘을 만드는 데 사용 했으며 오늘까지 항상 제대로 작동했습니다. 하지만 이제는 그 오류가 발생하고 작동하도록 할 방법이 없습니다. Img2icns 에 두 개의 PNG 파일 ( 512x5121024x1024)을 함께 넣으려고 했지만 항상 오류가 발생합니다. 또한 Apple OS X Human Interface Guideline의 지침을 따르려고 시도했지만 아이콘 세트를 만들려고하면이 터미널 오류가 발생합니다.

-bash : 예기치 않은 토큰 'newline'근처의 구문 오류

나는 터미널 명령을 잘하지 못해서 뭔가 잘못하고있는 것 같습니다. 나는 썼다 :

iconutil -c icns </Users/myname/SDK Mac Apps/MyApp/grafica/icon.iconset>

누구든지 도울 수 있다면 대단히 감사하겠습니다. 고마워, 매시.


:이 쉽도록 iconutil 랩하는 응용 프로그램을 구축 hobbyistsoftware.com/icontool
볼론 혼란

답변:


63

다음 지침을 확인하십시오 ( 링크 ).

iconutil을 사용하여 icns 파일을 수동으로 생성

iconutil명령 줄 도구의 변환의 iconset배포 준비, 높은 해상도 폴더는 파일을 ICNS. ( man iconutil터미널 에 입력하여이 도구에 대한 전체 문서를 찾을 수 있습니다 .)이 도구를 사용하면 결과 icns파일 도 압축 되므로 추가 압축을 수행 할 필요가 없습니다.

아이콘 세트를 icns 파일로 변환하려면

터미널 창에 다음 명령을 입력하십시오.

iconutil -c icns <iconset filename>

어디에 <iconset filename>당신이 변환하고자하는 아이콘의 세트를 포함하는 폴더의 경로입니다 icns. 다음 iconset file과 같이 출력 파일을 지정하지 않는 한 출력은와 동일한 위치에 기록됩니다 .

iconutil -c icns -o <icon filename> <iconset filename>

즉, 다음 <iconset filename>경로 로 바꿔야 합니다.

/Users/myname/SDK Mac Apps/MyApp/grafica/icon.iconset

경로에 공백이 포함되어 있으므로 큰 따옴표를 사용해야합니다. 예를 들면 다음과 같습니다.

iconutil -c icns "/Users/myname/SDK Mac Apps/MyApp/grafica/icon.iconset"

이 명령은 제대로 작동합니다.


2
iconutil그래도 사용할 필요는 없습니다 . 프로젝트에 iconset을 추가하고 Xcode가 빌드의 일부로 변환하도록 할 수 있습니다. 즉 바로 이전 (아주 짧은) 섹션에 덮여 : developer.apple.com/library/mac/documentation/GraphicsAnimation/...
피터 Hosey

@Anne : iconutil 명령은 ICNS 파일을 사용하지 않는 OS 버전에만 포함되어 있다는 점을 제외하고 ... OS10.6.8 V1.1을 사용하는 우리에게는 사랑이 없습니다 ... '우리의 길 또는 고속도로'는 훨씬 더 나쁩니다. 사용자보다 개발자를 위해.
Henrik Erlandsson 2012 년

@Anne : 그게 효과가 있었어 ... 정말 고마워! (또한 내 질문을 올바르게 설정해 주셔서 감사합니다). Peace, Massy
Blue

@HenrikErlandsson : Mac OS X의 모든 버전은 10.0으로 돌아가는 .icns 파일을 사용합니다.
Peter Hosey 2012 년

10
다음 파일이 있어야합니다. icon_16x16.png, icon_16x16@2x.png, icon_32x32.png, icon_32x32@2x.png, icon_128x128.png, icon_128x128@2x.png, icon_256x256.png, icon_256x256@2x.png. @ 2x 파일은 인치당 144 픽셀로 저장해야하고 다른 파일은 인치당 72 픽셀로 저장해야합니다.
carmin

284

다음은 1024x1024 png ( "Icon1024.png")를 필수 icns 파일로 변환하는 스크립트입니다. png 파일이 터미널 "cd"에있는 폴더의 "CreateICNS.src"라는 파일에 저장하고 "source CreateICNS.src"를 입력하여 호출합니다.

mkdir MyIcon.iconset
sips -z 16 16     Icon1024.png --out MyIcon.iconset/icon_16x16.png
sips -z 32 32     Icon1024.png --out MyIcon.iconset/icon_16x16@2x.png
sips -z 32 32     Icon1024.png --out MyIcon.iconset/icon_32x32.png
sips -z 64 64     Icon1024.png --out MyIcon.iconset/icon_32x32@2x.png
sips -z 128 128   Icon1024.png --out MyIcon.iconset/icon_128x128.png
sips -z 256 256   Icon1024.png --out MyIcon.iconset/icon_128x128@2x.png
sips -z 256 256   Icon1024.png --out MyIcon.iconset/icon_256x256.png
sips -z 512 512   Icon1024.png --out MyIcon.iconset/icon_256x256@2x.png
sips -z 512 512   Icon1024.png --out MyIcon.iconset/icon_512x512.png
cp Icon1024.png MyIcon.iconset/icon_512x512@2x.png
iconutil -c icns MyIcon.iconset
rm -R MyIcon.iconset

3
훌륭한. 나는 바탕 화면에 Icon1024.png를 넣고 코드를 실행하면 모든 것이 완료되었습니다
Logic

2
이 완벽한 작은 대본이 El Capitan에서 깨졌을 가능성이 있습니까? 내 Mac을 10.11.3으로 업그레이드했고이 스크립트는 이제 "오류 : 지원되지 않는 이미지 형식"을 반환 한 다음 "/Users/IconScript/MyIcon-osx.iconset:error : 'icon'이라는 변형에 이미지 리소스가 없습니다."를 반환합니다. 그런 다음 "MyIcon-osx.iconset : error : ICNS를 생성하지 못했습니다." El Capitan으로 업데이트되지 않은 Mac에서 동일한 스크립트와 .png 파일을 시도했고 항상 작동했습니다 ... = (
RanLearns

1
예 @Henry, 주석을 깔끔하게 만들기 위해 폴더 이름을 제거하고 있었으며 src 스크립트와 아이콘이 포함 된 폴더 내에서 터미널에서 실행하고 있습니다. 이전과 다른 유일한 점은 El Capitan 대 Yosemite입니다. OS를 성공적으로 업데이트하기 전에 문자 그대로 스크립트를 사용한 다음 업데이트 (동일한 폴더, 동일한 터미널 명령) 직후에 스크립트를 사용했으며 이제 해당 오류를 반환합니다. El Capitan에서 성공 했습니까?
RanLearns

3
중요 사항 : 아이콘 이미지 파일 이름 "icon_"으로 시작 해야합니다 . 이미지에는 알파 채널이 있어야합니다. 필요한 경우 ImageMagick으로 알파 채널을 추가 할 수 있습니다 convert abc.png -define png:color-type=6 abc_with_alpha.png.
David Grayson 2016

1
세상에. 전자 앱을 구축하고 아이콘을 다루는 것은 정말 힘든 일이었습니다. 모든 블로그 자습서는 오래된 온라인 유틸리티를 가리 킵니다. 여기 stackerflow에 대한 간단한 스크립트가 방금 하루를 보냈습니다. 감사합니다!
nelsonenzo 19 dec

26

고해상도 PNG이미지를 다양한 저해상도 복사본 으로 변환하기 위해 모든 종류의 스크립트를 사용 하는 것이 편리해 보일 수 있지만 (실제로는 그렇습니다) 이러한 종류의 자동 크기 조정이 인식 할 수있는 불완전한 이미지를 렌더링한다는 사실을 잊지 말아야합니다 .

낮은 해상도 — 아이콘을 흐리게합니다!

나도 좋아 imagemagick하지만이 작업에 적합한 도구는 아닙니다!

대신 디자이너에게 항상 벡터 형식의 로고를 요청해야합니다 (예 : SVG. 이를 통해 PNG필요한 모든 해상도로 완벽한 파일을 수동으로 준비한 다음 단일 .icns파일을 만들 수 있습니다. 그러면 저렴한 iPhone SE에서 최신 제품의 고급 Retina 디스플레이에 이르기까지 모든 단일 화면에서 앱 아이콘이 아름답게 보입니다. iMac. Photoshop, GIMP 또는 원하는 다른 도구를 사용하여 이러한 PNG를 생성 할 수 있습니다.

2020 년 현재 최신 Apple의 휴먼 인터페이스 가이드 라인 에서 다음 PNG파일을 준비해야 합니다.

+---------------------+--------------------+--------------+
|      filename       | resolution, pixels | density, PPI |
+---------------------+--------------------+--------------+
| icon_16x16.png      | 16x16              |           72 |
| icon_16x16@2x.png   | 32x32              |          144 |
| icon_32x32.png      | 32x32              |           72 |
| icon_32x32@2x.png   | 64x64              |          144 |
| icon_128x128.png    | 128x128            |           72 |
| icon_128x128@2x.png | 256x256            |          144 |
| icon_256x256.png    | 256x256            |           72 |
| icon_256x256@2x.png | 512x512            |          144 |
| icon_512x512.png    | 512x512            |           72 |
| icon_512x512@2x.png | 1024x1024          |          144 |
+---------------------+--------------------+--------------+

모든 PNG 파일이 준비된 후 .iconset확장자 ( Logos.iconset예 :)가있는 일부 디렉토리에 배치하고 에서 다음을 실행하십시오 Terminal.

iconutil --convert icns Logos.iconset

이 명령을 실행 한 후 오류가 없으면 모든 파일이 제대로 처리 Logos.icns된 것이므로 모든 최신 화면에 적합한 아름다운 선명한 로고가 모두 포함 된 동일한 디렉토리에 파일이있는 것입니다.


16

PNG 파일을 iconset 디렉토리로 변환하는 모든 작업을 수행하는 명령 줄 노드 모듈이 있습니다.

npm install -g node-icns
nicns --in adventure-cat.png --out adventure-cat.icns

9
더 이상 지원되지 않습니다. :(
jamescampbell

13

터미널에 입력 된이 명령은 이전 icns 파일을 새 형식으로 변환하는 데 도움이되었습니다.

cd Folder_With_Icns_File
iconutil -c iconset Your_Icon_Name.icns 
rm Your_Icon_Name.icns 
iconutil -c icns Your_Icon_Name.iconset
rm -R Your_Icon_Name.iconset

최신 정보

-ciconutil에 대한 매개 변수는 더 이상 지원되지 않습니다. 사용 --convert하는 대신 :

cd Folder_With_Icns_File
iconutil --convert iconset Your_Icon_Name.icns 
rm Your_Icon_Name.icns 
iconutil --convert icns Your_Icon_Name.iconset
rm -R Your_Icon_Name.iconset

1
이것을 보여 주셔서 감사합니다. 덕분에 나는 png를 얻기 위해 icns에서 반전 할 수있었습니다! :)
Noitidart

9

추가 설명은 .icns 파일 을 만들 때 접두어 "icon_ "을 사용 하여 모든 pic 파일의 이름을 바꿔야합니다. 그렇지 않으면 iconutil이 오류 메시지 ".iconset : error : Failed to generate ICNS"와 함께 실패합니다. 전혀 유익하지 않습니다.


7

@Henry (위의 주석)와 동일하지만 PNG 파일 이름을 인수로 사용하여 동일한 이름의 ICNS를 출력합니다.

참고 : PNG 파일 이름은 확장명을 구분하는 1 포인트 (예 : xpto.png) 만 가질 것으로 예상됩니다.

따라서 아래 코드를 png 파일이있는 폴더의 "CreateICNS.src"라는 파일에 저장하십시오.

코드 :

IFS='.' read -ra ADDR <<< "$1"
ICONSET=${ADDR[0]}.iconset
mkdir $ICONSET
sips -z 16 16     $1 --out $ICONSET/icon_16x16.png
sips -z 32 32     $1 --out $ICONSET/icon_16x16@2x.png
sips -z 32 32     $1 --out $ICONSET/icon_32x32.png
sips -z 64 64     $1 --out $ICONSET/icon_32x32@2x.png
sips -z 128 128   $1 --out $ICONSET/icon_128x128.png
sips -z 256 256   $1 --out $ICONSET/icon_128x128@2x.png
sips -z 256 256   $1 --out $ICONSET/icon_256x256.png
sips -z 512 512   $1 --out $ICONSET/icon_256x256@2x.png
sips -z 512 512   $1 --out $ICONSET/icon_512x512.png
cp $1 $ICONSET/icon_512x512@2x.png
iconutil -c icns $ICONSET
rm -R $ICONSET

사용하는 방법 :

그런 다음 터미널에서 "cd"를 동일한 폴더에 입력하고 다음을 입력합니다.

source CreateICNS.src {PNG filename}

여기서 {PNG filename}은 PNG 파일의 이름입니다 (예 : xpto.png).

파일 이름이 abc.png이면 다음을 사용합니다.

source CreateICNS.src abc.png

대박! 아주 간단합니다 :) 아마도 그것을 .sh / script로 만들면 더 많이 만들 것입니다 :) 감사합니다!
Gutemberg Ribeiro

6

svg 파일에서 icns를 만들기위한 bash 스크립트를 작성했습니다.

#!/usr/bin/env bash 
sizes=(16 32 64 128 256 512)
largfile='icon_512x512@2x.png'
if [ ! -f "$largfile" ]; then
  convert -background none -resize 1024x1024 "$1" "$largfile"
fi
for s in "${sizes[@]}"; do
  echo $s
  convert -background none -resize ${s}x${s} "$largfile" "icon_${s}x$s.png"
done

cp 'icon_32x32.png'     'icon_16x16@2x.png'
mv 'icon_64x64.png'     'icon_32x32@2x.png'
cp 'icon_256x256.png'   'icon_128x128@2x.png'
cp 'icon_512x512.png'   'icon_256x256@2x.png'

mkdir icon.iconset
mv icon_*x*.png icon.iconset
iconutil -c icns icon.iconset

Mac에서 librsvg 지원과 함께 imagemagick이 설치되어 있는지 확인하십시오.

brew install imagemagick --with-librsvg

이 스크립트는 저에게 아주 잘 봉사했습니다.


최신 정보

보다 철저한 처리 AppIcon.appiconset를 위해 올바른 레이아웃과 형식으로 생성하기위한 명령 줄 도구 (Swift로 작성)를 만들었습니다 .

https://github.com/kindlychung/genicon


5

@Henry의 스크립트를 리팩토링하여 더보기 좋게 만들었습니다.

#!/bin/zsh
NAME=$(basename $1 .png); DIR="$NAME.iconset"
mkdir -pv $DIR
for m r in 'n' '' '((n+1))' '@2x'; do
    for n in $(seq 4 9 | grep -v 6); do
        p=$((2**$m)); q=$((2**$n))
        OUT="$DIR/icon_${q}x${q}${r}.png"
        sips -z $p $p $1 --out $OUT
    done
done
iconutil -c icns $DIR
rm -frv $DIR

최신 정보

-ciconutil에 대한 매개 변수는 더 이상 지원되지 않습니다. 사용 -—convert하는 대신 :

#!/bin/zsh
NAME=$(basename $1 .png); DIR="$NAME.iconset"
mkdir -pv $DIR
for m r in 'n' '' '((n+1))' '@2x'; do
    for n in $(seq 4 9 | grep -v 6); do
        p=$((2**$m)); q=$((2**$n))
        OUT="$DIR/icon_${q}x${q}${r}.png"
        sips -z $p $p $1 --out $OUT
    done
done
iconutil -—convert icns $DIR
rm -frv $DIR

4
원본 버전은 간단하며 모든 쉘에서 수동으로 프로세스를 재현 할 수 있습니다.
Denis Barmenkov 2017

1
수동으로 작업하는 것을 선호하는 경우 컴퓨터가 전혀 필요하지 않습니다.
dardo82


3

내 앱의 유효성을 검사 할 때 다음 오류가 발생합니다.

애플리케이션 번들에는 512x512 및 512x512 @ 2x 이미지를 모두 포함하는 ICNS 형식의 아이콘이 없습니다.

나는 터미널 명령을 잘하지 못해서 뭔가 잘못하고있는 것 같습니다. 나는 썼다 :

iconutil -c icns </Users/myname/SDK Mac Apps/MyApp/grafica/icon.iconset>

한 가지로 Anne의 답변에 대한 의견에서 언급했듯이 iconutil을 사용할 필요가 없습니다. 프로젝트에 iconset을 추가하고 Xcode가 빌드의 일부로 변환하도록 할 수 있어야합니다.

어느 쪽이든 문제가 될 수 있습니다.

두 개의 PNG 파일 (512x512 및 1024x1024)을 넣으려고했지만 항상 오류가 발생합니다.

1024 x 1024 포인트 크기는 없습니다. 1024 x 1024 픽셀 요소 (Mountain Lion 이전에 1024 포인트 였음)는 이제 512 x 512 포인트 @ 2x에 사용됩니다.

PNG 파일의 이름은 다음과 같이 적절하게 지정되어야합니다. icon_512x512@2x.png


3

Apple의 이전 Icon Composer 버전 2.2는 잘 작동합니다. .ICNS를 열고 1024x1024 버튼을 누르고 이미지를 추가하기 만하면됩니다.


나는 원래 질문자에 대해 말할 수 없지만이 대답은 정확히 내가 필요한 것입니다. 감사!
pestophagous 2010 년

3
Apple 문서에서는 "참고 : Icon Composer를 사용하지 마십시오. 고해상도 icns 파일을 만들 수 없습니다."라고 말합니다. 즉, @ 2x 아이콘은 그렇게 할 수 없습니다.
Clay Bridges

Icon Composer는 잘 작동하는 것 같습니다. Xcode 용 Graphics Tools 패키지의 일부로 Apple 개발자 사이트에서 별도로 배송됩니다. 여기도 참조 하십시오 .
Michiel Kauw-A-Tjoe 2014-06-03

2

@ dardo82의 쉘 코드는 훌륭하고 작동합니다. 다음은 sh (모든 * nix의 경우)에서 더 간단하고 더 빠릅니다 (정말 중요한 것처럼) :

#!/bin/sh
#   This runs silent, be as verbose as you wish
NAME=$(basename ${1} .png)
DIR="${NAME}.iconset"
mkdir -p ${DIR}
for i in 16 32 128 256 512 ; do
    x=""
    for p in $i $(($i+$i)) ; do
        sips -z $p $p ${1} --out "${NAME}.iconset/icon_${i}x${i}${x}.png"
        x="@2x"
    done
done >/dev/null  # /dev/null in lieu of a "-s" silent option
iconutil -—convert icns $DIR
rm -r $DIR

내 스크립트에 변화를 주셔서 감사합니다, 지금은 있는지조차 나는 zsh을 사용하지 않을거야 이유
dardo82

1

다음은 주로 Henry의 예를 기반으로 한 함수입니다 (에서 유용 할 수 있음 ~/.bash_profile).

mkicns() {
    if [[ -z "$*" ]] || [[ "${*##*.}" != "png" ]]; then
        echo "Input file invalid"
    else
        filename="${1%.*}"
        mkdir "$filename".iconset
        for i in 16 32 128 256 ; do
            n=$(( i * 2 ))
            sips -z $i $i "$1" --out "$filename".iconset/icon_${i}x${i}.png
            sips -z $n $n "$1" --out "$filename".iconset/icon_${i}x${i}@2x.png
            [[ $n -eq 512 ]] && \
            sips -z $n $n "$1" --out "$filename".iconset/icon_${n}x${n}.png
            (( i++ ))
        done
        cp "$1" "$filename".iconset/icon_512x512@2x.png
        iconutil -c icns "$filename".iconset
        rm -r "$filename".iconset
    fi
}

사용법 :

$ mkicns "filename.png"  # double-quote if spaces exist in filename

에서 16x16까지 10 개의 크기를 만듭니다 512x512@2x. .png형식의 입력 이미지 만 허용 합니다.


1

운영 iconutil -c icns Icon.iconset

노트

  • Icon.iconset은 폴더입니다.
  • 소문자로 시작하는 이름 icon_
  • Icon.icns올바른 이미지로 볼 때 작동한다는 것을 알 수 있습니다.

여기에 이미지 설명 입력


3x? Apple은 그것을 요구하지 않습니다.
신경 전달 물질

1

두 가지 작업이 있습니다.
-10 개의 올바른 icns 파일 생성-Xcode
프로젝트가 올바르게 사용하도록합니다.

이 두 가지 작업에 한 시간 동안 문제가 있었고 무슨 일이 일어나고 있는지 '보지'않을 때도 마음에 들지 않으므로 여기에 신중한 작업을위한 경로가 있습니다.

올바른 icns 파일 10 개 생성 :
위의 Henry 스크립트를 사용했습니다. 'c'명령을 포함하여 HighSierra 및 Xcode 9.2에서 여전히 작동합니다.
내가 얻은 icns 파일은 Finder / Quicklook에서 하나의 아이콘 크기로만 나타나고 미리보기에서는 10 개 중 8 개만 표시되었습니다.
그래서 터미널을 사용하고 cd와 함께 내 폴더로 가서 방금 만든 icns 파일에서 iconutil -c iconset (icns filename) 명령을 사용하여 icns 파일을 iconset 폴더로 되돌리고-lo & behold-볼 수 있습니다 새로 생성 된 10 개의 아이콘 파일. iconset 폴더에 대한 훑어보기를 사용하고 슬라이더로 확대 할 수 있도록 전체 화면 모드를 사용하여 모든 크기가 실제로 매우 잘 보이는지 확인할 수 있습니다.

제쳐두고 : PSE에서 크기 조정 옵션을 모두 사용하지 않았기 때문에 PSE를 사용한 크기 조정 시도보다 더 좋아 보였습니다. PSE를 사용하는 경우 png 파일이 색상 프로파일없이 저장되었는지 확인하십시오. 또한 내 무지를 고백하면 256x256 @ 2 파일은 512x512 파일과 동일합니다. 둘 다 72dpi입니다. 위의 144dpi 주석을 따르려고 시도해도 효과가 없었습니다.

Xcode 프로젝트를 올바르게 사용하십시오 :
먼저 Xcode 내에서 모든 결실없는 시도를 삭제하고 git 저장소에 깨끗한 버전을 커밋했습니다 (영리했을 것입니다, 먼저 깨끗한 버전을 커밋했을 것입니다. 추가 오디시).
또한 info.plist 파일에 '아이콘 파일'항목에 연결된 포인터가없고 일반 프로젝트 설정에서 앱 아이콘으로 AppIcon을 선택했는지 확인했습니다.
그런 다음 assets.asset 카탈로그를 추가하고 자산 카탈로그 내에 OS 용 새 'AppIcons and Launch Images'AppIcon 폴더를 추가했습니다.
그런 다음 iconset 폴더에서 각 png 그림 파일을 해당 AppIcon Spaceholder로 복사했습니다 (옵션을 누른 상태에서 끌어서 놓기). 그래서 다시 무슨 일이 일어나고 있는지 볼 수 있습니다. Xcode는이를 icns 파일로 변환했거나 icns 폴더에서 파생 된 내 iconset 폴더로 파일 형식이 허용되었습니다.

그런 다음 보관하고 확인하면 업로드 또는 확인시 오류가 발생하지 않습니다.


포맷 중! 귀하의 대답은 좋을 수 있지만 읽을 수 없습니다. 단락과 캐리지 리턴을 사용합니다.
Nic3500

0

나는 이것이 필요했지만 CMake를 위해. 또한 SVG를 제공하는 옵션도 원했습니다.

요점은 다음과 같습니다 : https://gist.github.com/Qix-/f4090181e55ea365633da8c3d0ab5249

그리고 CMake 코드 :

# LICENSE: CC0 - go nuts.

# Hi :) This is what I used to generate the ICNS for my game, Tide.
# Both input formats (SVG vs PNG) work just fine, but in my experience
# the SVG came out with noticeably better results (although PNG wasn't
# a catastrophe either). The logo for the game was simple enough that
# SVG was indeed an option.

# To use:
#
#    make_icns( INPUT "path/to/img.{svg,png}"
#               OUTPUT ICNS_PATH )
#
# Then add it as a custom target or use it as a
# dependency somewhere - I give you that option.
#
# For example:
#
#    add_custom_target( my-icns ALL DEPENDS "${ICNS_PATH}" )
#
# For the associated utilities:
#
# - PNG: brew install imagemagick
# - SVG: brew cask install inkscape
#
# Enjoy!

function (make_icns_from_png)
    cmake_parse_arguments (
        ARG
        ""             # Boolean args
        "INPUT;OUTPUT" # List of single-value args
        ""             # Multi-valued args
        ${ARGN})

    find_program (
        convert_exe
        NAMES "convert" "convert.exe"
        DOC "Path to ImageMagick convert")
    if (NOT convert_exe)
        message (FATAL_ERROR "Could not find ImageMagick's 'convert' - is ImageMagick installed?")
    endif ()

    get_filename_component (ARG_INPUT_ABS "${ARG_INPUT}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
    get_filename_component (ARG_INPUT_ABS_BIN "${ARG_INPUT}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}")
    get_filename_component (ARG_INPUT_FN "${ARG_INPUT_ABS_BIN}" NAME_WE)
    get_filename_component (ARG_INPUT_DIR "${ARG_INPUT_ABS_BIN}" DIRECTORY)

    set (sourceimg "${ARG_INPUT_ABS}")

    set (basepath "${ARG_INPUT_DIR}/${ARG_INPUT_FN}")
    set (output_icns "${basepath}.icns")
    set (iconset "${basepath}.iconset")

    set (deplist "")

    foreach (size IN ITEMS 16 32 128 256 512)
        math (EXPR size2x "2 * ${size}")

        set (ipath "${iconset}/icon_${size}x${size}.png")
        set (ipath2x "${iconset}/icon_${size}x${size}@2x.png")

        list (APPEND deplist "${ipath}" "${ipath2x}")

        add_custom_command (
            OUTPUT "${ipath}"
            COMMAND "${convert_exe}" ARGS "${sourceimg}" -resize "${size}x${size}" "${ipath}"
            MAIN_DEPENDENCY "${sourceimg}"
            COMMENT "ICNS resize: ${ipath}"
            VERBATIM)

        add_custom_command (
            OUTPUT "${ipath2x}"
            COMMAND "${convert_exe}" ARGS "${sourceimg}" -resize "${size2x}x${size2x}" "${ipath2x}"
            MAIN_DEPENDENCY "${sourceimg}"
            COMMENT "ICNS resize: ${ipath2x}"
            VERBATIM)
    endforeach ()

    add_custom_command (
        OUTPUT "${output_icns}"
        COMMAND iconutil ARGS --convert icns --output "${output_icns}" "${iconset}"
        MAIN_DEPENDENCY "${sourceimg}"
        DEPENDS ${deplist}
        COMMENT "ICNS: ${output_icns}"
        VERBATIM)

    if (ARG_OUTPUT)
        set ("${ARG_OUTPUT}" "${output_icns}" PARENT_SCOPE)
    endif ()
endfunction ()

function (make_icns_from_svg)
    cmake_parse_arguments (
        ARG
        ""             # Boolean args
        "INPUT;OUTPUT" # List of single-value args
        ""             # Multi-valued args
        ${ARGN})

    set (CMAKE_FIND_APPBUNDLE NEVER) # otherwise, it'll pick up the app bundle and open a shit ton of windows
    find_program (
        inkscape_exe
        NAMES "inkscape" "inkscape.exe"
        DOC "Path to Inkscape"
        PATHS "/usr/local/bin" "/usr/bin")

    message (STATUS "Inkscape path: ${inkscape_exe}")

    if (NOT inkscape_exe)
        message (FATAL_ERROR "Could not find Inkscape - is it installed?")
    endif ()

    get_filename_component (ARG_INPUT_ABS "${ARG_INPUT}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
    get_filename_component (ARG_INPUT_ABS_BIN "${ARG_INPUT}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}")
    get_filename_component (ARG_INPUT_FN "${ARG_INPUT_ABS_BIN}" NAME_WE)
    get_filename_component (ARG_INPUT_DIR "${ARG_INPUT_ABS_BIN}" DIRECTORY)

    set (sourceimg "${ARG_INPUT_ABS}")

    set (basepath "${ARG_INPUT_DIR}/${ARG_INPUT_FN}")
    set (output_icns "${basepath}.icns")
    set (iconset "${basepath}.iconset")

    set (deplist "")

    foreach (size IN ITEMS 16 32 128 256 512)
        math (EXPR size2x "2 * ${size}")

        set (ipath "${iconset}/icon_${size}x${size}.png")
        set (ipath2x "${iconset}/icon_${size}x${size}@2x.png")

        list (APPEND deplist "${ipath}" "${ipath2x}")

        add_custom_command (
            OUTPUT "${ipath}"
            COMMAND "${inkscape_exe}" ARGS -z -e "${ipath}" -w ${size} -h ${size} "${sourceimg}"
            MAIN_DEPENDENCY "${sourceimg}"
            COMMENT "ICNS resize: ${ipath}"
            VERBATIM)

        add_custom_command (
            OUTPUT "${ipath2x}"
            COMMAND "${inkscape_exe}" ARGS -z -e "${ipath2x}" -w ${size2x} -h ${size2x} "${sourceimg}"
            MAIN_DEPENDENCY "${sourceimg}"
            COMMENT "ICNS resize: ${ipath2x}"
            VERBATIM)
    endforeach ()

    add_custom_command (
        OUTPUT "${output_icns}"
        COMMAND iconutil ARGS --convert icns --output "${output_icns}" "${iconset}"
        MAIN_DEPENDENCY "${sourceimg}"
        DEPENDS ${deplist}
        COMMENT "ICNS: ${output_icns}"
        VERBATIM)

    if (ARG_OUTPUT)
        set ("${ARG_OUTPUT}" "${output_icns}" PARENT_SCOPE)
    endif ()
endfunction ()

function (make_icns)
    cmake_parse_arguments (
        ARG
        ""             # Boolean args
        "INPUT;OUTPUT" # List of single-value args
        ""             # Multi-valued args
        ${ARGN})

    if (NOT ARG_INPUT)
        message (FATAL_ERROR "INPUT is required")
    endif ()

    if (NOT IS_ABSOLUTE "${ARG_INPUT}")
        get_filename_component (ARG_INPUT "${ARG_INPUT}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
    endif ()

    if (NOT EXISTS "${ARG_INPUT}")
        message (FATAL_ERROR "INPUT does not exist: ${ARG_INPUT}")
    endif ()

    file (RELATIVE_PATH ARG_INPUT "${CMAKE_CURRENT_SOURCE_DIR}" "${ARG_INPUT}")

    get_filename_component (ARG_INPUT_EXT "${ARG_INPUT}" EXT)
    if ("${ARG_INPUT_EXT}" STREQUAL ".png")
        make_icns_from_png (INPUT "${ARG_INPUT}" OUTPUT child_output)
    elseif ("${ARG_INPUT_EXT}" STREQUAL ".svg")
        make_icns_from_svg (INPUT "${ARG_INPUT}" OUTPUT child_output)
    else ()
        message (FATAL_ERROR "INPUT must refer to a .png or .svg, but a ${ARG_INPUT_EXT} was provided")
    endif ()

    if (ARG_OUTPUT)
        set ("${ARG_OUTPUT}" "${child_output}" PARENT_SCOPE)
    endif ()
endfunction ()

-1

안녕하세요, 제 필요에 따라 드래그 앤 드롭 아이콘만으로 작동하는 드롭 릿을 만들거나 폴더에서 검색하는 아이콘을 만들었습니다 (모든 아이콘의 볼륨 검색에 많은 시간이 걸릴 수 있으므로 폴더로 제한했습니다). 따라서 드래그 앤 드롭으로 아이콘을 포함 할 수있는 모든 폴더 또는 응용 프로그램을 드롭 할 수 있습니다. 생성 된 아이콘 세트는 원래 아이콘의 이름을 가지며 "/ aaaicones"디렉토리와 아이콘 경로에 배치됩니다. xcode.app을 제출하면 "/ aaaicones 폴더의 예에서"/aaaicones/Applications/xcode.app/access.iconset "및 /aaaicones/Applications/xcode.app/access.icns (다시 생성 된 아이콘)를 찾을 수 있습니다. 아이콘의 전체 경로 및 해당 iconset 예제 "/Applications/xcode.app/Contents/Applications/Instruments의 경로를 추적하는 텍스트 파일입니다.

on open draggedItems
    set input to draggedItems
    set fich to draggedItems


    set media to {}

    set theInfo to {}

    set n to "0"
    repeat with currentItem in draggedItems
        set dirchoisi to POSIX path of fich
        if ".icns" is not in dirchoisi then
            if "Volumes" is not in dirchoisi then

                set origi to do shell script "echo   /aaaicones" & dirchoisi
                set fich to do shell script "echo " & fich & " | xxd -p -c 100000 | sed 's#3a#2f#g' | xxd -r -p | sed 's#" & dirchoisi & "#" & "/aaaicones" & dirchoisi & "#g' | xxd -p -c 100000 | sed 's#2f#3a#g' | xxd -r -p"
                tell application "Finder"
                    if exists (folder fich) then
                        set nn to "0"
                        repeat with nn from 1 to 5
                            set origi to do shell script "echo  " & origi & "/" & " | sed 's#//#" & nn & "/" & "#'"
                            set fich to do shell script "echo " & fich & " | sed 's#:aaaicones*.*#" & origi & "#'" & " | xxd -p -c 100000 | sed 's#2f#3a#g' | xxd -r -p"

                            if not (exists folder (fich as Unicode text)) then
                                try
                                    set origi to do shell script "echo  " & origi
                                    exit repeat
                                end try
                            end if
                        end repeat
                    end if
                end tell
                tell application "Finder"
                    if not (exists folder (fich as Unicode text)) then
                        do shell script "mkdir -p -m 0777 " & quoted form of origi
                    end if
                end tell
                try
                    set theInfo to do shell script "find " & (quoted form of dirchoisi) & " -name *.icns "
                end try




                set AppleScript's text item delimiters to return

                set theList to text items of theInfo

                set AppleScript's text item delimiters to ""

                set n to count theList
                repeat with i from 1 to n
                    if "Volumes" is not in item i of theList then
                        set end of media to item i of theList
                    end if
                end repeat
                set n to count media
                set cheminicns to do shell script " > " & quoted form of (origi & "aalisticones.txt") & " |  chmod 777 " & quoted form of (origi & "aalisticones.txt")
                set cheminicns to do shell script "ls " & quoted form of (origi & "aalisticones.txt")

                tell application "Finder"
                    set letext to (POSIX file cheminicns as alias)
                    set label index of letext to 2
                end tell



                repeat with i from 1 to n

                    set hdd to item i of media
                    try

                        set input to do shell script "echo   " & hdd & " | sed 's#//#/#g; s#(#\\(#g;s#)#\\)#g' "
                        do shell script "echo   " & quoted form of input & " >>" & quoted form of cheminicns
                        set png to do shell script "echo " & quoted form of input & " | sed 's#.*/##' "

                        do shell script "cp -f " & quoted form of input & " " & quoted form of origi
                        set input to do shell script "iconutil -c iconset  " & quoted form of (origi & png)
                        do shell script "echo   " & quoted form of (origi & png) & " | sed 's#.icns#.iconset#' >>" & quoted form of cheminicns
                    end try
                end repeat
                tell application "Finder"
                    if exists (folder fich) then
                        open fich
                    end if
                end tell

            end if
        else

            set input to do shell script "echo   " & dirchoisi & " | sed 's#//#/#g; s#(#\\(#g;s#)#\\)#g' "
            set png to do shell script "echo " & quoted form of input & " | sed 's#.*/##' "
            set origi to do shell script "echo " & quoted form of ("/aaaicones/aIconeseule/" & input) & " | sed 's#/Volumes/##; s#" & quoted form of png & "##'"
            do shell script "mkdir -p -m 0777 " & quoted form of origi
            do shell script "echo   " & quoted form of input & " >>" & quoted form of origi & "aalisticones.txt"

            do shell script "cp -f " & quoted form of input & " " & quoted form of origi
            set input to do shell script "iconutil -c iconset  " & quoted form of (origi & png)
            do shell script "echo   " & quoted form of (origi & png) & " >>" & quoted form of origi & "aalisticones.txt"
        end if
    end repeat
end open
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.