0

Ruby コマンドのセットを使用して Mac フォルダーのアイコンを変更することは可能ですか? OSX では、変更されたフォルダー内に .icon ファイルが存在する必要があると思います。おそらく、jpg または png を .icon 基準に変換する特定の方法がありますか?

-- 編集 (実用的なソリューション。ImageMagick とOSXUtilsが必要) * 注、私のアプリケーションでは、フォルダー アイコンを設定するつもりでした。これがファイルに対しても機能する可能性は十分にあります。

def set_icon image, folder

        # Convert to absolute paths and setup
        image = File.expand_path image
        folder = File.expand_path folder
        dim = 512
        thumb = folder + '/'+ 'thumb.png' # PNG supports transparency
        icon = folder + '/'+ 'icon.icns'

        # Convert original to thumbnail
        system "convert '#{ image }' -quiet -thumbnail '#{dim}x#{dim}>' \
          -background none -gravity center -extent #{dim}x#{dim} '#{ thumb }'"

        # Set icon format. Causes 'libpng warning: Ignoring attempt to set cHRM RGB triangle with zero area'
        system "sips -s format icns '#{ thumb }' --out '#{ icon }'"

        # Set the icon
        system "seticon -d '#{ icon }' '#{ folder }'"

        # Cleanup
        FileUtils.rm thumb
        FileUtils.rm icon
end
4

1 に答える 1

1

私がそれらをいじってから何年も経ちましたが、.icon ファイルのフォーマットは Apple のドキュメントとウィキペディアに記載されていました。

私の記憶が正しければ、名前には"\r"入力を困難にするために末尾が付けられていますが、これはコードから簡単に処理できます。

通常のFile.rename方法で .icon ファイルをフォルダに移動できるはずで、Finder は正しく動作するはずです。


あなたのコードを見ると、私はいくつかのことを別の方法で行います:

require 'fileutils'
def set_icon image, folder

    # Convert to absolute paths and setup
    image = File.expand_path image
    folder = File.expand_path folder
    temp = File.join(folder, 'temp2' + File.extname(image))

    # Copy image
    FileUtils.cp(image, temp)

    # Take an image and make the image its own icon
    system "sips -Z 512 -i #{ temp }"

    # Extract the icon to its own resource file
    system "DeRez -only icns #{ temp } > tmpicns.rsrc"

    # Append a resource to the folder you want to icon-ize
    system "Rez tmpicns.rsrc -o $'#{ folder }/Icon\r'"

    # Use the resource to set the icon.
    system "SetFile -a C #{ folder }"

end

sprintfor (「フォーマット」) に依存し%て文字列を作成するのではなく、単純な補間を使用します。sprintf文字列は、列幅を強制し、値を別の表現に変換する必要がある場合に最適ですが、フォーマットされていない単一の値を挿入する場合はやり過ぎです。

sips有望に見えるこのオプションがありますが、マニュアルページには十分に文書化されていません:

 -i
 --addIcon
       Add a Finder icon to image file.

また、Stack Overflow の兄弟サイト「Ask Different」には、「一口でイメージを独自のアイコンとして設定するとアイコンがぼやけるのはなぜですか?代替手段はありますか?」、「CLI経由でディレクトリのアイコンを設定するにはどうすればよいですか?」、「ターミナルを使用したファイルまたはフォルダーのアイコン"便利そうです。

于 2013-07-03T23:35:33.367 に答える