iconutilを使用してicnsファイルを手動で作成する方法


106

アプリを検証しているときに、次のエラーが発生します。

アプリケーションバンドルには、512x512512x512@2x画像の両方を含むICNS形式のアイコンは含まれていません。

私はImg2icnsアプリでicnsアイコンを作成するために使用しており、今日までは常に正しく機能していました。しかし、今はそのエラーが発生しており、それを機能させる方法はありません。Img2icnsで 2つのPNGファイル(512x512および1024x1024)を一緒に配置しようとしましたが、常にそのエラーが発生します。AppleのOS Xヒューマンインターフェイスガイドラインの指示にも従おうとしましたが、アイコンセットを作成しようとすると、次のターミナルエラーが発生します。

-bash:予期しないトークン 'newline'に近い構文エラー

端末のコマンドはあまり得意ではないので、何か間違っているのかもしれません。私が書いた:

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

誰かがそれを助けることができればそれは非常に高く評価されます。ありがとう、マッシー。


これを簡単にするためにiconutilをラップするアプリを作成しました:hobbyistsoftware.com/icontool
混乱したVorlon

回答:


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ただし、おそらくを使用する必要はありません。アイコンセットをプロジェクトに追加し、ビルドの一部としてXcodeに変換させるだけです。:直前の(非常に短い)セクションでカバーだとdeveloper.apple.com/library/mac/documentation/GraphicsAnimation/...
ピーターHosey

@Anne:iconutilコマンドがICNSファイルを使用しないOSバージョンにのみ含まれていることを除いて... OS10.6.8 V1.1を使用する私たちへの愛はない...それはさらに悪い「私たちの道または高速道路」ですユーザーよりも開発者のために。
Henrik Erlandsson 2012

@Anne:うまくいった...どうもありがとう!(また、私の質問を適切に設定してくれてありがとう)。ピース、マッシー
ブルー

@HenrikErlandsson:Mac OS Xのすべてのバージョンが.icnsファイルを使用し、10.0までさかのぼります。
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 2013年

284

以下は、1024x1024 png( "Icon1024.png"という名前)を必要なicnsファイルに変換するスクリプトです。それをpngファイルのあるフォルダーの「CreateICNS.src」というファイルに保存し、ターミナル「cd」で同じフォルダーに保存し、「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
この完璧な小さなスクリプトがエルキャピタンで壊れている可能性はありますか?Macを10.11.3にアップグレードすると、このスクリプトは「エラー:サポートされていない画像形式」を返し、次に「/Users/IconScript/MyIcon-osx.iconset:error: 'icon'という名前のバリアントに画像リソースが含まれていません。」を返します。その後、「MyIcon-osx.iconset:error:Failed to generate ICNS」と表示されます。El CapitanにアップデートされていないMacで同じスクリプトと.pngファイルを試しましたが、いつものようにそこで機能しました... =(
RanLearns

1
ええ@ヘンリー、私はフォルダ名を削除してコメントをきれいにしようとしていました。srcスクリプトとアイコンを含むフォルダ内からターミナルで実行しています。El CapitanとYosemiteの違いだけです。OSを正常に更新する前にスクリプトを使用し、更新後すぐに(同じフォルダー内の同じターミナルコマンドで)スクリプトを使用して、エラーを返しました。El Capitanで成功しましたか?
RanLearns 2016

3
注意すべき重要事項:アイコン画像のファイル名「icon_」で始まる必要があります。画像にはアルファチャネルが必要です。必要に応じて、ImageMagickでアルファチャネルを追加できますconvert abc.png -define png:color-type=6 abc_with_alpha.png
David Grayson、

1
ああ、神様。電子アプリを作成してアイコンを処理するのは、とても大変なことです。すべてのブログチュートリアルは、古いオンラインユーティリティをポイントしています。ここにあるスタッカーフローの簡単なスクリプトは、ちょうど私の日を作りました。ありがとうございました!
nelsonenzo

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ファイルをアイコンセットディレクトリに変換するすべての作業を行うコマンドラインノードモジュールがあります。

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、2015年

9

追加コメント、.icnsファイルを作成するときは、すべてのpicファイルの名前を「icon_」で変更する必要があります。そうしないと、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リベイロ

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

1
手動で操作したい場合は、コンピュータは必要ありません。
dardo82 2017


3

アプリを検証しているときに、次のエラーが発生します。

アプリケーションバンドルには、ICNS形式のアイコンが含まれておらず、512x512と512x512 @ 2xの両方のイメージが含まれています。

私はターミナルコマンドがあまり得意ではないので、何か間違っているのかもしれません。私が書いた:

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

1つには、アンの回答に関するコメントで述べたように、おそらくiconutilを使用する必要はありません。アイコンセットをプロジェクトに追加して、ビルドの一部としてXcodeに変換させるだけです。

いずれにせよ、これはあなたの問題かもしれません:

2つの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ボタンを押して画像を追加するだけです。


私は元の質問質問者について話すことはできませんが、この答えはまさに私が必要としたものです。ありがとう!
2013年

3
Appleのドキュメントでは、「注:Icon Composerは使用しないでください。高解像度のicnsファイルを作成することはできません。」とあります。つまり、@ 2xアイコンはそのようにはできません。
クレイブリッジ

Icon Composerは正常に動作しているようです。Xcodeパッケージのグラフィックツールの一部として、Apple開発者サイトとは別に出荷されます。こちらもご覧ください
Michiel Kauw-A-Tjoe 2014年

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を使用したのかよく
わかり

1

これは主にヘンリーの例に基づいた関数です(で役立つ可能性があります~/.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?アップルはそれを必要としません。
神経伝達物質

1

2つのタスクがあります。
-10個の正しいicnsファイルを作成
する-Xcodeプロジェクトにそれらを正しく使用させる

これらのタスクの両方で1時間長い問題があり、何が起こっているのかを「確認」しないと気に入らないので、ここでは慎重な問題のパスを示します。

10個の正しいicnsファイルを作成します。
上記のヘンリーのスクリプトを使用しました。これは、「c」コマンドを含め、HighSierraおよびXcode 9.2で引き続き機能します。
私が入手したicnsファイルは、Finder / QuicklookおよびPreviewでアイコンサイズが1つしか表示されなかったため、10サイズのうち8サイズしか表示されませんでした。
ターミナルを使用し、cdを使用してフォルダーに移動し、次のコマンドを使用しました:作成したばかりのicnsファイルでiconutil -c iconset(icns filename)を使用して、icnsファイルをiconsetフォルダーに戻し、-見た目-新しく作成した10個のアイコンファイル。iconsetフォルダーのクイックルックを使用して(およびフルスクリーンモードを使用してスライダーでズームできるように)、すべてのサイズが実際に非常によく見えることを確認できました。

余談ですが、PSEでのサイズ変更の試みよりも見た目が良かったです。おそらく、PSEのすべてのサイズ変更オプションで時間をかけていなかったためです。PSEを使用する場合は、pngファイルがカラープロファイルなしで保存されていることを確認してください。また、私の無知を認めると、私にとって256x256 @ 2ファイルは512x512ファイルと同じです-どちらも72dpiです。上記の144 dpiのコメントをフォローしようとしてもうまくいきませんでした。

Xcodeプロジェクトを正しく使用するために取得します。
最初に、Xcode内の無駄な試みをすべて削除し、クリーンバージョンをgitリポジトリにコミットしました(賢い方法は、クリーンバージョンを最初にコミットすることでした。加えてオディシー)。
また、info.plistファイルには「アイコンファイル」エントリにリンクされたポインタがなく、一般的なプロジェクト設定ではアプリアイコンにAppIconを選択していることを確認しました。
次に、assets.assetカタログを追加し、アセットカタログ内に新しい「AppIcons and Launch Images」AppIcon Folder for OSを追加しました。
次に、アイコンセットフォルダーから各png画像ファイルをそれぞれのAppIcon Spaceholderにコピー(オプションを押したままドラッグアンドドロップ)しました。だから、私は何が起こっているのかを見ることができました。Xcodeはそれをicnsファイルに変換しました。または、icnsフォルダーから派生した私のアイコンセットフォルダーとして、ファイル形式は受け入れられました。

次に、アーカイブして検証します。アップロードまたは検証時にエラーは発生しません。


フォーマット中!あなたの答えは良いかもしれませんが、判読できません。段落と改行を使用します。
Nic3500 2018

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」ディレクトリとアイコンのパスに配置されます。「/ aaaicones」フォルダの例xcode.appを送信すると、「/ aaaicones / Applications / xcode.app / access.iconset」と/aaaicones/Applications/xcode.app/access.icns(再作成されたアイコン)が見つかりますアイコンのフルパスがトレースされるテキストファイルであり、対応するアイコンセットの例へのパス "/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.