何かと便利なMacのAutomatorですが、
ある時、画像をjpegに変換しようとして圧縮率(クオリティ)が設定できないことに気がつきました。
その時は
- スクリーンショットを画像メモのような形で残したい
- 一時的なものなので綺麗な画質は要らない&大きなファイルサイズにはしたくない
- 右クリックからのメニューで一発変換できたら楽
という感じだったのですが、
あらかじめ用意されていなくともシェルスクリプトを使えば実現できるので今回はその方法をご紹介。(備忘録)
スクリーンショットのファイル形式
デスクトップのスクリーンキャプチャや、Firefoxでページ全体のスクリーンショットを撮ると自動的に「png」で保存されます。
でもpngって綺麗だけどちょっとサイズが大きい。一番低画質のjpgで良いんだけれど。
実を言えばMacOSのスクリーンキャプチャ機能は設定を変えれば「jpg」でも保存可能ですし、一回プレビューappなんかで開いて「書き出し」から保存し直す事もできます。
・・・でもちょっと面倒くさい。
それに最初から圧縮率高めで保存してしまうと他の用途で使う時に汚いし、
「画面メモ」はメモなのだからせいぜい保存してからの1ステップで終わらせたい。
ということで従来通り「png」で保存されたものを右クリックメニューから変換することにしました。
Automatorでサービスを作成
やることは単純。
Finderで変換したいファイルを選んで実行したいので、Automatorからサービス(クイックアクション)を作成します。
サービスは「イメージ」または「ファイルまたはフォルダ」を受け取って、シェルスクリプトを実行。
入力の引渡し方法は「引数として」を選択。
for f in "$@" do sips "$f" --out "$f.jpg" -s format jpeg -s formatOptions 10 mv "$f" ~/.trash done
(※渡されたものが画像ファイルかどうかの判定などはしていません。使う側の知能でフィルタしてください)
簡単に説明すると
“$@”は選ばれたファイル(複数可)です。
ファイル名に空白が含まれているとエラーが出るのでダブルクオーテーションで囲ってあげて、
一つずつ取り出しては sips(Scriptable Image Processing System) コマンドを使ってjpgに変換、クオリティは10%(かなり圧縮率高め)で処理し、終わったら元の画像はゴミ箱へと移動、という流れ。
いきなり rm コマンドで削除してしまうと怖いのでゴミ箱移動にしてあります。
あとは適当な名前をつけて保存します。
例)jpg変換
あとは画像ファイルを右クリックしてメニューから選べばOK
サービスの項目数が多い場合は「サービス」にまとめられるのでその中から選ぶ。
まとめ
ちょっとした小ネタ程度ですが意外と便利です。
Automatorを使う事で手軽に実行できるのがいい。
いちいちターミナル開いて〜コマンド入力して〜とか面倒くさいしね。
ということで以上。
これが何かの参考にでもなれば幸いです。
コメント