Node jsのWatch機能で自動的にPhotoshopでjpgイメージを書き出す。

javascript, Photoshop

PhotoshopやIllustratorで特定のファイルやフォルダーが更新、追加されたら自動的に書き出し等を行うExtensionを開発します。Adobeのソフトを通じて何かのファイルをPDFやjpgを書き出すといった作業がいろんな分野で多いと思ってファイルの監視を発火イベントとして使用したいと思ったのが始まりです。

まずは手始めとしてPhotoshopによる自動jpeg書き出し機能を開発したいと思います。仕様としては。

  • 最初に監視対象のフォルダーを選ぶ
  • ボタンを押して監視をスタートさせる
  • psd、tiffファイルが追加されたらPhotoshopで自動的にjpegに書き出す。

Nodeではデフォルトでfs.watchモジュールがありますがもっと便利な監視モジュール chokidarを使用します。詳しくは 公式を参照。

公式には書いてないですがwatchオブジェクトを代入する前に代入する変数に最初にnullを代入しないと後々closeメソッドで監視を止める事ができないようなのでwatch変数を宣言すると同時にnullを代入します。まずは監視対象フォルダー選択イベント

 

以下監視イベント開始関数

 

重要なオプションを挙げますと、ignoreInitialにはtrueを指定。これを指定しないと監視イベントを立ち上げた瞬間に監視対象のフォルダーに入っているファイルの処理を開始してしまいます。depthは監視するフォルダーの深さを指定するオプションで、デフォルトだとundefinedになっているらしいですがデフォルトのままテストしたら対象フォルダーの中を再帰的に処理し出したので0を指定しました。そこから具体的に監視対象フォルダーの中にファイルが追加された場合やフォルダー内のファイルが削除、更新された時のイベントの処理を設定できますが今回はフォルダーの中にファイルが投げ込まれた場合にのみPhotoshopの処理を開始します。以下イベント発生時の処理関数

extList配列にあらかじめ処理対象の拡張子を指定して追加されたファイルが対象の拡張子に合致するか調べてtrueだったらjsxで書き出し処理をする。

その後、フォルダーに追加されたファイルをPhotoshopで開いてjpegフォルダーを作成してjpegフォルダー内にjpeg画像を書き出して元々のファイルはfinishedフォルダーを作成して移動。最後に開始発火ボタンイベントと停止イベントです。停止させる場合前述の通りcloseメソッドで止めます。

 

誰でもファイルを特定のフォルダーに投げるだけでjpeg画像の書き出せる監視システムができました。というわけで手始めにPhotoshopで簡単な監視システムの紹介ですが次回に続く。

*2020年10月27日
Illustrator向けですが配置画像の監視Extensionを作りました。
Extension Watch Placed Image

*2021年01月15日
今回解説したExtensionをアップデートしました。こちらの記事をご覧ください。

Beer 寄付してサイトを応援する。