シリーズ投稿。Photoshopフィルタとしてsbsarを使う
entrypoint.setup
- 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
そろそろだ。
- psjsだけでノイズフィルター作ってる例があったので実装見てみる。
https://developer.adobe.com/photoshop/uxp/2022/assets/874d23d0b54117a6e72ee98bbe79c41b/imaging.psjs - メニューからコマンド実行させる 。
- レイヤー名で画像を書き出す。
- python編へ


