UXP for Photoshop:利用しそうなクラスとメソッドの確認

UXP for Photoshop:利用しそうなクラスとメソッドの確認

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

ドキュメントの確認をもうちょっと。

Photoshop クラスリファレンス

今回作りたい仕組みのは選択されたレイヤーをドキュメントサイズでエクスポートして、外部のプロセスで編集、編集された結果の画像を、置き換えまたは別のレイヤーとしてインポート、選択レイヤーは元のまま、という物。

ざっくり必要そうな部分のみ確認する。使いそうなプロパティとメソッドを
https://developer.adobe.com/photoshop/uxp/2022/ps_reference/classes/photoshop/

Photoshopクラス

  • activeDocument
  • batchPlay 使わないで済ませたい。

Layerクラス

  • bounds / boundsNoEffects この辺り使わないで済む方がいいな。。
  • kind
  • name
  • visible
  • copy() layerを増やす物ではなく、クリップボードに入れるもの。
  • delete()
  • duplicate()
  • move()
  • rasterrize()

レイヤースタイルなどは一度ラスタライズする必要があるかもしれない。そうすると非破壊にするためには一度レイヤーをコピーして編集して削除する必要がある?

photoshopCoreクラス

  • executeAsModal()
  • performMenuCommand() メニュー呼び出しを使うと実装がスッキリ事があるかも。
  • redrawDocument() 採苗が呼び出すとかありそう。
  • showAlert()

photoshopActionクラス

  • batchPlay()
  • batchPlaySync()
  • createDocument()

PNG Save Options

使うかもしれない。

Imaging API (Beta)

ピクセル情報を取って直接あれこれできる。
今回はレイヤーのエクスポートとインポートができればいいので出番がないかもしれない。使わないで済ませたい。便利そうではあるので今後使う事は大いにありそう。今使うのはベータなので嫌な予感もする。

PhotoshopImageData クラス

  • getPixels() オプションたくさんあるなあ。。
  • dispose()
  • putPixels() やっぱりオプションたくさんあるなあ。。
  • createImageDataFromBuffer()

数値の配列でガツンとあれこれする模様。

考察

レイヤーをエクスポート・インポートするメソッドが見当たらない。。サンプルを探したいが、もしそうだとすると以下のような実装を取らなくてはいけない。

  1. 新規ドキュメントを作成してレイヤーをコピー、PNGとして保存する。インポートもその逆の手順を取る。
  2. フォトショップにレイヤーを書き出す機能があるので、そのコマンドをbatchplayする。インポートも別の機能だがあるのでこれもbatchplayする。
  3. 配列としてピクセル情報が取れるので、そのままファイル化してあとは外部でなんとかする。インポートも同じく。
  4. クリップボード経由で画像をやりとりする。

1が正解だろうか?2はちょっと避けたい。3はすぐ作れそうだけど遅いのではないか?
4がもしかして(可能なら)いいアイデア?ただし一度に画像一つしかやり取りできない。

UXPリファレンス

同様に関連しそうなところをざっくりと。

navigator.clipboard

  • setContent() テキスト以外もいけるのか不明。
  • getContent()
  • write()
  • read()
  • その他

window.Blob

  • type
  • arrayBuffer()
  • stream()

バイナリを扱うものかな?

window.WebSocket

https://developer.adobe.com/photoshop/uxp/2022/uxp/reference-js/Global%20Members/Data%20Transfers/WebSocket/

おやメソッドが少ない。。

window.XMLHttpRequest

https://developer.adobe.com/photoshop/uxp/2022/uxp/reference-js/Global%20Members/Data%20Transfers/XMLHttpRequest/

全部使うのでプロパティとメソッド省略。リクエストとレスポンスという実装でもよさそう。

window.Path

https://developer.adobe.com/photoshop/uxp/2022/uxp/reference-js/Global%20Members/Path/

pythonとかでも馴染みのあるやつだ。

os

https://developer.adobe.com/photoshop/uxp/2022/uxp/reference-js/Modules/os/OS/

  • homedir()

nodejsのOSと同じもの?

shell

https://developer.adobe.com/photoshop/uxp/2022/uxp/reference-js/Modules/shell/Shell/

  • openPath()
  • openExternal()

openExternalをうまく使えばスキーム登録されているアプリケーションに処理を渡せるかも?処理の戻りはどうしようか?ファイルをウォッチするとか。。

Persistent File Storage

https://developer.adobe.com/photoshop/uxp/2022/uxp/reference-js/Modules/uxp/Persistent%20File%20Storage/

FileSystem (fs)

https://developer.adobe.com/photoshop/uxp/2022/uxp/reference-js/Modules/FileSystem/

注意書きとして、File access permissionsがうんたら書いてある。

  • readFile()
  • readFileSync()
  • writeFile()
  • writeFileSync()
  • open()
  • close()
  • read()
  • write()

ファイルをどこの場所に置けるのかが問題。ドキュメント確認すれば書いてあるっぽい。

File

https://developer.adobe.com/photoshop/uxp/2022/uxp/reference-js/Modules/uxp/Persistent%20File%20Storage/File/

プロパティとメソッドは全部使うので省略。
そもそも自由な所にファイル作れるんだっけ。。?

まとめ

色々な制限にぶつかって自由に外部で画像処理するまで行くのに手間取りそうだ。

NEXT TODO

手を動かす詐欺終了までもうちょっと。

前の投稿

次の投稿

Previous post UXP for Photoshop:API概要とモーダルモードの挙動について
Next post UXP for Photoshop:ファイル書き出しとwebsocketサンプル