UXP for Photoshop:fsモジュールとentrypoint.setupのドキュメント確認

UXP for Photoshop:fsモジュールとentrypoint.setupのドキュメント確認

シリーズ投稿。Photoshopフィルタとしてsbsarを使う

entrypoint.setup

https://developer.adobe.com/photoshop/uxp/2022/uxp/reference-js/Modules/uxp/Entry%20Points/EntryPoints/

  • require(“uxp”).entrypoints で取得。
  • イベントハンドラーの設定や、メニューアイテムの登録と変更に使う。
  • 初期化で1回呼ばれ、2度呼ぶとエラー。
  • メニューアイテムの変更は何度でも行える。
  • プラグインとパネルとコマンドの情報を定義する。
  • プラグイン起動後のハンドラ(必須)と廃棄前のハンドラ関数が設定できる。関数内のthisはUxpPluginInfoを示す。
  • panels以下にパネルIDをキーにパネル情報を並べる。
  • パネル情報にはたくさんのハンドラやメニューアイテムが記述できる。
  • パネルのmenuItems以下には配列でメニューアイテムを並べる。実際にこの並びのまま表示される。
  • メニューアイテム情報はオブジェクト型だが、はステリングのID兼ラベルのみでもいい。
  • “-“のみのメニューアイテム情報はメニュー表示のセパレータを表す。
  • メニューアイテム情報がオブジェクト型の場合は、ID,ラベル、チェックされてるか、利用可能か、および、サブアイテムメニューの配列が持てる。ラベルが省略されるとIDがそのまま使われる。
  • commands以下にはコマンドIDをキーにコマンド情報を並べる。
  • コマンド情報にはrun関数が必須、cancel関数はオプションだが将来の実装用で設定してもまだ何もしない。関数内でthisは UxpCommandInfo を示す。
  • runへの引数はフォトショUXP v4とv5で異なる。v5ではコンテキストとその他引数を受け取る。
  • getPanel(id)でパネル情報(UxpPanelInfo)が取れる。manifestで設定したそのままな感じ。
  • getCommand(id)でコマンド情報(UxpCommandInfo)が取れる。manifestで設定したもの以外のコマンド情報(entrypoint.setup で設定したもの?)が取れる。

manifestとやっている事がかぶっているような感じも受ける。manifestには動的なコードはかけないんだろうが。

fsモジュール

fxモジュールはPhotoshopだけでなくすべてのUXPプラグインで利用できるモジュール。このドキュメントも確認してみる。
https://developer.adobe.com/photoshop/uxp/2022/uxp/reference-js/Modules/FileSystem/

  • ファイルパスの指定には、”plugin:”, “plugin-data:”, “plugin-temp:”, “file:” 等のスキーマを用いる。
  • Windows ではファイルアクセスパーミッションの問題があるので、XD(フォトショもだろう)はこの匿名ファイルアクセス機能?を提供しない。(要は自由な場所にファイルアクセスができないという事)

ファイル読み書き系

  • readFile でバイナリやテキストを非同期で読み込める。
  • readFileSyncでバイナリやテキストファイルを同期で読み込める。
  • writeFileでバイナリやテキストを非同期でファイルに書き出せる。データ型はストリングかアレイバッファ系。
  • writeFileSyncでファイルを同期で書き出せる。

オープンして読み書き

  • openでファイルを非同期で開ける。
  • closeでクローズ。
  • readでファイルの読み込み。バッファを用意、読み込まれたものはそこに書きこまれる。
  • writeでバッファの値をファイルに書き出す。

その他

  • lstat でファイル情報を非同期で得る。プラットフォームごとに取得できる内容が異なる部分がある。
  • lstatSyncで同期処理にてファイル情報を得る。
  • renameでファイル名を書き換える。非同期処理な模様。
  • copyFileでファイルをコピーする。非同期処理な模様。
  • unlinkでファイルを削除する。非同期処理な模様。
  • mkdirでディレクトリを作成する。非同期処理な模様。多階層同時に作れるのかは不明。nodejsに準ずるんだろうが、nodejsわからん。
  • rmdirでフォルダを非同期で削除する。
  • readdirでディレクトリ内のファイル一覧を非同期で得る。
  • readdirSyncでディレクトリ内のファイル一覧を同期処理で得る。

まとめ

entrypoint.setupは冗長な感じがする。fsモジュールはpythonのOSモジュールのようだが、非同期処理まみれなのが嫌だ。

NEXT TODO

そろそろだ。

前の投稿

次の投稿

Previous post UXP for Photoshop:ファイル書き出しとwebsocketサンプル
Next post UXP for Photoshop:psjsでノイズフィルター作るサンプルの確認