2

OS X Mountain 10.8.2 を使用しています。

Automator を使用して AppleScript を追加し、 Iconoodle - 便利な ICNS から PNG 画像への変換で古いアプリの開発者からコマンドをコピーしました(Iconoodle は PPC アプリであるため、OS X 10.8 ではサポートされていません)。ワークフローをアプリケーションとして保存しました。画像を選択してアプリケーションにドロップしましたが、画像が ICNS に変換されませんでした。また、画像を .icns ファイル AppleScript Obj-C に変換するという質問からコピーしましたが、どちらも機能しませんでした。

私はそれに本当にイライラしています。Automator を使用して、複数の画像を PNG から ICNS に一度に変換したいと考えています。アイコン エディタ アプリケーションで各画像を 1 つずつ ICNS に変換するのは非常に面倒です。Preview.app は、PNG 形式の画像を ICNS に変換したくありません。これは、ページが 1 つしかないためです。アイコンに多くのページがある場合にのみ、ICNS に変換できます。

あなたはそれを作ることを知っていますか?

ご清聴ありがとうございました。

4

2 に答える 2

0

AppleScript Editor に貼り付けるだけで、iconoodle スクリプトを実行できます。これは sips の単なるラッパーですが、icns を png にしか変換できません。

sips を直接使用して、png を icns に変換できます。

for f in *.png; do sips -s format icns "$f" --out "${f%png}icns"; done
于 2012-11-26T10:27:13.510 に答える
0

ここに別のアプローチがあります... 注:icnsファイルが作成される前に、元のpngが予想されるサイズにスケーリングされます。元の png のコピーを保持する場合は、最初に複製します。スクリプトに行を追加して、自動的に行うこともできます。

property expectedSizes : {16, 32, 48, 128, 256, 512, 1024, 9999999}

set myFiles to choose file with multiple selections allowed

repeat with aFile in myFiles

    tell application "System Events" to set bPath to POSIX path of (container of aFile)
    set newPath to bPath & "/" & bName(aFile) & ".icns" as text
    set aFile to quoted form of (POSIX path of aFile)

    set {W, H} to {paragraph 1, paragraph 2} of (do shell script "sips -g pixelWidth -g pixelHeight " & aFile & " | grep -Eo [0-9]*$")
    set {W, H} to {W as number, H as number}

    if W > H then
        set W to eSize(W)
        do shell script "sips " & aFile & " -Z " & W & " -p " & W & space & W & " --padColor FFFFFF -i"
        delay 1
    else if H > W then
        set H to eSize(H)
        do shell script "sips " & aFile & " -Z " & H & " -p " & H & space & H & " --padColor FFFFFF -i"
        delay 1
        -- H = W but not in expected sizes
    else if H is not in expectedSizes then
        set H to eSize(H)
        do shell script "sips " & aFile & " -Z " & H & " -p " & H & space & H & " --padColor FFFFFF -i"
        delay 1
    end if

    do shell script "sips -s format icns " & aFile & " --out " & quoted form of newPath
end repeat

on bName(theFile)
    tell application "Finder" to set {name:fileName, name extension:nameExtension} to theFile
    set baseName to text 1 thru ((get offset of "." & nameExtension in fileName) - 1) of fileName
end bName

on eSize(lDimen)
    repeat with i from 1 to 8
        if lDimen < item i of expectedSizes then return item (i - 1) of expectedSizes
    end repeat
end eSize
于 2012-11-26T15:11:58.970 に答える