
@rabirgoです。
以前からこれやりたいと思ってたことが出来たのでメモ。
私は、一旦 iPhoto→ローカルフォルダ に画像を保存してから、サイズを変えてblogに使ってます。オリジナルのファイルはサイズが大きくてオーバースペックなので。
(ちなみに、iPhoto のファイルは iPhone やデジカメから自動で取り込んで iPhoto Library のどこかに保存されてると思います)
この作業が面倒で、簡単にできないものかと思ってました。一応 一括変換するワンライナー(sipsを使用)を作ってはいたものの、今度はフォルダからターミナルを起動して…という手順が面倒。
なので、出来れば iPhoto からローカルフォルダに保存した時に自動で縮小か、1アクションぐらいで出来ないかなぁと。
automatorやフォルダアクションを使えば出来そうだなと思ってたんですが、使ったことがなかったんで調べるのもまた面倒、と放置してました。言うほど困ってなかったし。
今回、重い腰を上げて取り組んでみたので共有します。
食わず嫌いだったautomator
ワークフロー形式のインタフェースが面倒そうというのが先に来てたんだけど、そうでもなかった。(やたら選択肢が多くて、ちょこちょこと変えなきゃいけないんだろうなーとか思ってた)
iCloud上に保存とか出来るようで、なかなか便利そう。
今回、ゴールを以下の操作実現とします。
目指す手順
- ローカルフォルダを作る(画像上、/Users/rabirgo/Documents/blog_img/tmp/test_picturesというフォルダ名です)
- iPhotoからローカルフォルダにコピー
- test_picturesを右クリックし、sips_Z_600 を選択すると画像ファイルが縮小される(オリジナルファイルもbak配下に保存)
automatorの起動
アプリケーション配下にあります。LaunchPadであれば冒頭の画像のように「その他」の下から。spotlightやAlfredであれば”automator”を入力。

起動すると、なにをしたいのか聞いてくるので「サービス」を選択。

フォルダの場所を取得
選択しているフォルダの場所(パス)を取得するアクションを追加します。

- 検索窓に「選択」と入力
- 「選択された Finder 項目を取得」を選択してドラッグ&ドロップ(もしくはダブルクリック)
- 右上の”サービス”は、次の選択項目を受け取る”:「フォルダ」、検索対象:Finder.appを選択
フォルダの場所を引数としたシェルスクリプトを追加
$@に、選択されたフォルダが渡されてくるようです。(二つ選択までは動作確認済み。但し、フォルダ名にスペースがあると動作せず。”$f”としてみたけどダメ。特に困らないので放置)

- 検索窓に「シェル」と入力
- 「シェルスクリプトを実行」を選択してドラッグ&ドロップ(もしくはダブルクリック)
- 実行するシェルスクリプトを入力。テキストは以下。
[bash]
for f in “$@”
do
cd $f
mkdir -p bak && ls *.[jJ][pP][gG] *.[pP][nN][gG] | while read file ; do echo “mv ${file} bak && sips -Z 600 bak/${file} –out ${file}” | bash -x ; done
done
[/bash]
bak というフォルダを作成し、拡張子 jpg, png のファイルに対してオリジナルのファイルを保存後、一辺 600px に変換します。
参考:sips(1) Mac OS X Manual Page
動作確認
Finderで対象のフォルダを選択します。

automatorで「実行」を押下。ワーニングが出ますが無視して「OK」押下。


「bak」というフォルダが作成され、各ファイルはサイズが縮小されました。

「bak」の中にはオリジナルのファイルがあります。大きさを変更することで、4.4MB(約4,400KB)→36KBに圧縮。

作成したworkflowを保存してコンテキストメニュー(右クリック)で使えるようにする
作成したworkflowを保存します。Cmd+sか、ファイル→保存。名前は、右クリック時に表示させたい名前にします。「~/Library/Services/」に保存されます。

システム環境設定を開いて、キーボードを選択。

ショートカットタブを開いて、左側の「サービス」を選択。
ファイルとフォルダのグループ内に、先ほど登録した名称でサービスが登録されていれば成功です。

こんな感じでコンテキストメニューに表示されます。

iCloud上に保存(あまり便利ではなさそうなので非推奨)
この手順でいいか自信が無いけど一応。
作成したworkflowは「~/Library/Services/」に保存されています。このファイルを iCloud 上に保存。
なお、システム環境設定で [iCloud – 書類とデータ] にチェックを入れておく必要があります。念のため「オプション」ボタンを押下して「Automator」にチェックが入ってることを確認。
-
- 先ほどworkflowを作成したAutomatorは開いたままにしておく
- AutomatorでCmd+Oを押下、タブのiCloudを選択。後ほど、ここにworkflowをドラッグするので開いたままにしておく

-
- Finderで、Cmd+Shift+Gを押下すると「フォルダの場所を入力:」ダイアログが出現するので「~/Library/Services/」を入力して「移動」

-
- workflowが見つかる

-
- iCloudのダイアログにドラッグ。すると…コピーされると思いきや「移動」してしまう。で、そのまま「サービス」として使えればいいんだけど使えないんだよね。。

- ということで、仕方ないので iCloud のダイアログを閉じて、もう一度 workflow を保存。「~/Library/Services/」に保存されます。
で、iCloud で共有した PC ではダウンロードの必要があるんだろうな。Dropbox + シンボリックリンク 使った方が早そう。
いじょ。