最近早起きなので、ちょっとしたユーティリティーを作りました。もしかしたらすでに存在しているかもしれませんが、今朝MacOSにOptiPNGをインストールしてコマンドでPNG画像をまとめて軽量化というエントリーを見てGUIでできたらいいなーと思ったので作りました。
- 用途
- 特定のフォルダ以下に存在するPNG画像を最適化する
- 必要構成
- Mac OS X 10.7以上を使っていて、macports経由でoptiPNGをインストール済み(詳しくは上記エントリー参照)
使い方
OptiPNG.zipをダウンロードして解凍、中にあるOptiPNG.appをFinderのツールバーにドラッグ&ドロップします
ツールバーにあるOptiPNGのアイコンの上に最適化したいPNG画像が含まれているフォルダをドラッグ&ドロップ
以上です。Growlに対応させようと思いましたが、めんどうだったのでやめました。
Automatorでできるこんなこと
このアプリ(というか、ドロップレット)はAutomatorで作りました。Automatorは結構便利で、色んなことで来ます。特にファイルのリストを取得するのが簡単なので、Unixコマンドを組み合せると色んなアプリがさくっと作れます。
今回はPNGの最適化と組み合わせましたが、他にも色んなUnixコマンドと組み合せることができます。今回書いたワークフローは以下のようなものですが、他でも代替同じです。
- Automatorを起動して新規アプリケーションを作成
- フォルダの内容を取得を配置
- Finder項目にフィルタを適用を配置し、拡張子pngでフィルタリング
- Applescriptを実行を配置
これでApplescriptはファイルのリストを受け取ります。今回のアプリでは、ファイルリストのそれぞれに対して以下のシェルコマンドを発行しているだけです。
optipng $FILE_NAMEただし、ApplescriptのファイルパスはPOSIXじゃなかったような気がするので、そこで一工夫必要です。また、シェルコマンドも環境変数が適用されないので、単純にoptipngとやっても、command not foundになってしまいます。以下のようにやるといいでしょう。
on run {input, parameters} --inputにファイルのリストが渡ってきます repeat with file_alias in input --ファイルのエイリアスをPOSIXパスに変換 set file_path to (POSIX path of file_alias) --シェルコマンドを発行(ログインシェルではないので、コマンドは絶対パス) do shell script "/opt/local/bin/optipng " & file_path end repeat --通知本文を設定 set notify_text to "処理が終わりました" --ダイアログ display dialog notify_text giving up after 2 buttons {"OK"} default button 1 return input end runポイントはコマンドをフルパスで書くことと、コマンドを発行する前にファイルパスを変換することでしょうか。
これを応用して do shell command 以下の部分を書き換えれば、色んなドロップレットが作れます。Webサイトを本番環境にデプロイする前にポチッと押すだけになります。
- 特定のフォルダの.svnフォルダを全部削除する
- 特定のフォルダのCSSやJSすべてをgzipやYUI CompressorやCSS compressorで圧縮する
- QuickTimeやFFmpegを呼び出して動画の形式を変換する
そうえいば、3とかは昔仕事で作りましたね。泣きながらソフトバンク向けのH264ハイスペック動画を出力したのはいい想い出です。
もっとも、Unixコマンドをインストールしないといけないことに変わりはないので、「誰でも使える」という感じではないですね。もし「誰でも使える」ことを目指すのなら、時間をかけてCocoaで作り、必要なコマンドは全部バンドルして、AppStoreで売るのがいいと思います。
おまけ アイコン変えたい
同梱したアイコンは僕が作ったものですが、ダサいので変えたいという場合は以下の方法で。
- OptiPNG.appを右クリックして、「パッケージの内容を表示」をクリック
- ResourcesフォルダにあるAutomatorApplet.icnsをIconComposer.app(Xcodeをインストールするとついてくるはず)で開く
- ドラッグ&ドロップで画像を配置していき、保存
注意点としては、アプリをAutomatorで編集してしまうとアイコンが元に戻っちゃうことでしょうか。