前回は、フォルダアクションを作成する準備まで解説しました。
今回はいよいよフォルダアクションを作成します。
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 件のコメント:
コメントを投稿