127

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

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

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

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

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

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

誰かが助けることができればそれは非常にありがたいです。ありがとう、マッシー。

4

18 に答える 18

331

1024x1024 png(「Icon1024.png」という名前)を必要なicnsファイルに変換するスクリプトを次に示します。pngファイルがターミナル「cd」にあるフォルダの「CreateICNS.src」というファイルに保存し、同じフォルダに「sourceCreateICNS.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
于 2013-12-20T12:24:29.927 に答える
70

次の手順を確認してください(リンク)。

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

iconutilコマンドラインツールは、フォルダーを展開可能な高解像度のicnsファイルに変換しiconsetます。man iconutil(ターミナルに入力すると、このツールの完全なドキュメントを見つけることができます。)このツールを使用すると、結果のicnsファイルも圧縮されるため、追加の圧縮を実行する必要はありません。

アイコンのセットをicnsファイルに変換するには

ターミナルウィンドウに次のコマンドを入力します。

iconutil -c icns <iconset filename>

ここで、<iconset filename>は、変換するアイコンのセットを含むフォルダーへのパスですicnsiconset 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"

このコマンドは正しく機能するはずです。

于 2012-09-06T23:15:33.603 に答える
31

あらゆる種類のスクリプトを使用して高解像度PNG画像をさまざまな低解像度コピーに変換するのは便利に思えるかもしれませんが(実際にはそうです)、この種の自動サイズ変更は知覚できるほど不完全な画像をレンダリングすることを忘れないでください。

解像度が低い—アイコンがぼやけています!

つまり、私も大好きimagemagickですが、このタスクに適したツールではありません。

代わりに、デザイナーにベクター形式のロゴを常にリクエストする必要がありますSVG。これが手元にあれば、PNG必要なすべての解像度で完璧なファイルを手動で準備し、1つの.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れ、同じディレクトリにファイルがあり、最新の画面に適したアプリの美しい鮮明なロゴがすべて含まれています。

于 2016-09-24T16:01:14.380 に答える
15

PNGファイルをアイコンセットディレクトリに変換するすべての作業を実行するコマンドラインノードモジュールがあります。

npm install -g node-icns
nicns --in adventure-cat.png --out adventure-cat.icns
于 2016-04-05T03:13:37.813 に答える
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

アップデート

iconutilの-cパラメーターはサポートされなくなりました。--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
于 2012-10-29T17:59:23.827 に答える
12

追加のコメント、.icnsファイルを作成するときは、すべてのpicファイルの名前を「icon_」というプレフィックスで変更する必要があります。そうしないと、iconutilはエラーメッセージ「.iconset:error:Failed togenerateICNS」で失敗します。これはまったく有益ではありません。

于 2015-07-30T15:08:19.370 に答える
9

@Henry(上記のコメント)と同じですが、引数としてPNGファイル名を取り、同じ名前のICNSを出力します。

注: PNGファイル名には、拡張子を区切るための1つのポイント、つまりxpto.pngのみが含まれている必要があります。

(シェルスクリプト用に更新)

したがって、以下のコードをpngファイルがあるフォルダーの「CreateICNS.sh」というファイルに保存し、実行許可を与えます。

コード:

#!/bin/bash
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」して次のように入力します。

./CreateICNS.sh {PNG filename}

ここで、{PNGファイル名}はPNGファイルの名前、つまりxpto.pngです。

ファイルの名前がabc.pngの場合は、次を使用します。

./CreateICNS.sh abc.png

更新2021-05-20:

私はこれの更新されたバージョンを持っていますが、ここに正しい参照を残すためにどこで見つけたのかわかりません。誰かがこれの所有者であるか、インターネットページのリンクを知っている場合は、クレジットを更新できるようにコメントしてください:

これは完全なbashスクリプトであるため、たとえばpng2icns.sh、実行権限を付与して保存する必要があります。

次に、を呼び出すpng2icns.sh pngfile1.pngと、16x16〜512x512のすべてのアイコン解像度を含むICNSファイルとiconsetフォルダーが生成されます。

#!/bin/bash
# Creates an icns file from a source image

src_image="$1"
if [ -z "$1" ]; then
    echo "No source image was passed to this script"
    exit 1
fi

icns_name="$2"
if [ -z "$2" ]; then
    icns_name="iconbuilder"
fi

if [ "${src_image:(-3)}" != "png" ]; then
    echo "Source image is not a PNG, making a converted copy..."
    /usr/bin/sips -s format png "$src_image" --out "${src_image}.png"
    if [ $? -ne 0 ]; then
        echo "The source image could not be converted to PNG format."
        exit 1
    fi
    src_image="${src_image}.png"
fi

iconset_path="./${icns_name}.iconset"
if [ -e "$iconset_path" ]; then
    /bin/rm -r "$iconset_path"
    if [ $? -ne 0 ]; then
        echo "There is a pre-existing file/dir $iconset_path the could not be deleted"
        exit 1
    fi
fi

/bin/mkdir "$iconset_path"

icon_file_list=(
    "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"
    "icon_512x512.png"
    "icon_512x512@2x.png"
    )

icon_size=(
    '16'
    '32'
    '32'
    '64'
    '128'
    '256'
    '256'
    '512'
    '512'
    '1024'
    )

counter=0    
for a in ${icon_file_list[@]}; do
    icon="${iconset_path}/${a}"
    /bin/cp "$src_image" "$icon"
    icon_size=${icon_size[$counter]}
    /usr/bin/sips -z $icon_size $icon_size "$icon"
    counter=$(($counter + 1))
done

echo "Creating .icns file from $iconset_path"
/usr/bin/iconutil -c icns "$iconset_path"
if [ $? -ne 0 ]; then
    echo "There was an error creating the .icns file"
    exit 1
fi

echo "Done"
exit 0
于 2018-05-26T07:00:36.583 に答える
6

@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

アップデート

iconutilの-cパラメーターはサポートされなくなりました。-—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
于 2015-06-30T23:41:54.417 に答える
6

デッドシンプル.png.icns

  1. IconMaker.appをダウンロードしてください-それはただの.applescriptが噛まないだけです
  2. 作成したIconMaker.appに.pngをドラッグアンドドロップします。

詳細http ://eon.codes/blog/2016/12/06/Creating-an-app-icon/

High sierraの更新により iconutil、ソースの.pngサイズがより厳密になりました。これについては、ジャンプ後のブログ投稿で詳しく説明しています。✌️

于 2016-12-06T16:12:22.553 に答える
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

于 2016-12-14T16:08:43.890 に答える
3

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

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

⋮</p>

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

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

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

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

2つのPNGファイル(512x512と1024x1024)を一緒に配置しようとしましたが、常にエラーが発生します。

1024x1024ポイントのサイズはありません。1024 x 1024ピクセル要素(Mountain Lionの前は1024ポイントでした)は、512x512ポイント@2xで使用されるようになりました。

PNGファイルには適切な名前を付ける必要があります:icon_512x512@2x.png

于 2012-09-07T06:48:01.353 に答える
3

Appleの古いIconComposerバージョン2.2は問題なく動作します。その中の.ICNSを開き、1024x1024ボタンを押して、画像を追加するだけです。

于 2012-11-14T22:41:41.397 に答える
3

@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
于 2017-07-22T01:10:05.813 に答える
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フォーマットのみの入力画像を受け入れます 。

于 2017-06-12T22:08:18.640 に答える
1

走るiconutil -c icns Icon.iconset

ノート

  • Icon.iconsetはフォルダです
  • 名前は小文字で始まりますicon_
  • Icon.icnsあなたが正しい画像で見るとき、あなたはそれがうまくいくことを知っています

ここに画像の説明を入力してください

于 2017-08-09T13:31:41.057 に答える
1

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

私はこれらのタスクの両方で1時間の問題を抱えていましたが、何が起こっているのかがわからないときも気に入らないので、ここでは慎重なタスクへの道を示します。

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

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

Xcodeプロジェクトにそれらを正しく使用させる:
最初に、Xcode内の無駄な試みをすべて削除し、クリーンバージョンをgitリポジトリにコミットしました(賢いのは、最初にクリーンバージョンをコミットすることでした-アイコンを必死に開始する前に追加オデッセイ)。
また、info.plistファイルに「iconfile」エントリにリンクされたポインタがないこと、および一般的なプロジェクト設定でAppIconsにAppIconを選択したことを確認しました。
次に、assets.assetカタログを追加し、アセットカタログ内にOS用の新しい「AppIconsとLaunchImages」AppIconフォルダーを追加しました。
次に、アイコンセットフォルダから各png画像ファイルをそれぞれのAppIconスペースホルダーにコピーしました(オプションを押したままドラッグアンドドロップします)。繰り返しになりますが、何が起こっているのかがわかりました。Xcodeはそれをicnsファイルに変換しました。あるいは、おそらく-icnsフォルダーから派生した私のiconsetフォルダーとして-ファイル形式が受け入れられました。

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

于 2018-02-23T20:11:00.323 に答える
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 ()
于 2019-01-26T01:07:57.667 に答える
-2

こんにちは、私のニーズのために、ドラッグアンドドロップアイコンだけで機能するドロップレットを作成するか、フォルダ内を検索するためのアイコンを作成しました(すべてのアイコンのボリュームでの検索には時間がかかる可能性があるため、フォルダに限定しました)。したがって、ドラッグアンドドロップでは、フォルダやアプリケーション、アイコンを含むことができるものなら何でもドロップできます。作成されたアイコンセットには元のアイコンの名前が付けられ、ディレクトリ「/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
于 2016-12-13T10:38:02.733 に答える