2012年5月11日金曜日

Automator: Retina画像をフォルダアクションで一括コンバート(2)

前回からの続きです。
前回は、フォルダアクションを作成する準備まで解説しました。
今回はいよいよフォルダアクションを作成します。

Automator起動

Automator起動

まずはAutomatorを起動して、新規フォルダアクションを作成します。

そして、アクションライブラリから「フォルダの内容を取得」を選び、右のワークフローにドラッグします。
ドラッグしたら、「見つかった各サブフォルダからも取得」にチェックを入れておいて下さい。
フォルダの内容を取得

次に「シェルスクリプトを実行」アクションを、先ほどのアクションの下にドラッグします。
シェルのタイプを「Ruby」に、入力の引き渡し方法を「引数」に設定します。
シェルスクリプト

Rubyスクリプト

そして、デフォルトで収まっているスクリプトを消去して、以下のスクリプトをコピーして下さい。
require 'rubygems'
require 'RMagick'

convertedCnt = 0

ARGV.each do |filename|
    img_type = File.extname(filename).downcase
    if (img_type==".png")||(img_type==".jpg")||(img_type==".tif")
        ext = File.extname(filename)
        base = File.basename(filename,ext)
        dir = File.dirname(filename)

        if /^#{dir}\/(.+)@2x(#{ext})$/ =~ filename
            exportdir = dir+"/convert"
            exportname = exportdir+"/"+$1+$2

            folderFlag = true
            if !FileTest.exist?(exportdir)
                Dir.mkdir(exportdir)
            else
                if FileTest.file?(exportdir) #convertというファイルが存在するので格納場所が無い
                    puts "Error!: #{exportdir}というファイルが存在します。"
                    folderFlag = false
                end
            end

            if folderFlag
                # 対象の画像ファイルの読み込み
                original = Magick::Image.read(filename).first
                width = original.columns
                height = original.rows

                # リサイズ
                image = original.resize(width/2,height/2,filter=Magick::LanczosFilter,0.9)
                image.write(exportname)

                convertedCnt += 1
            end
        end
    end
end
puts "#{convertedCnt}個のファイルをコンバートしました。"

コンバート結果表示の実装

このままでもいいのですが、コンバートの終了やエラー表示などのために、もうひと手間加えます。
「リストから選択」アクションを、「シェルスクリプトを実行」の下に追加して下さい。
リストから選択

「リストから選択」は、本来はユーザーにリスト選択を要求するアクションなのですが、スクリプトの実行結果を表示するための適切なアクションが無かったので、このアクションで代用します。

メッセージに「全フォルダをチェックしました。」と入力しておきます。

対象フォルダの作成

次にフォルダクションの対象となるフォルダを作成します。
どこでもいいので、好きな名前のフォルダをFinderで作成して下さい。
僕はRetinaConvertFolderという名前のフォルダを作成しました。

Finderからそのフォルダをドラッグして、Autoamtorの右上にある「フォルダを選択」にドロップします。
フォルダを選択にドロップ

結果、以下のようになります。
ドロップ後

最後に、このフォルダアクションを保存します。
「ファイル>保存」を選び、好きな名前で保存して下さい。
なお、フォルダアクションの保存先は、任意のフォルダを選ぶことはできず、
~ユーザー名/ライブラリ/Workflows/Applications/Folder Actions/
の中に保存されます。

さて、次回はコンバートの実行テストを行います。
Automator: Retina画像をフォルダアクションで一括コンバート(3)

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...