シリーズ投稿。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()
数値の配列でガツンとあれこれする模様。
考察
レイヤーをエクスポート・インポートするメソッドが見当たらない。。サンプルを探したいが、もしそうだとすると以下のような実装を取らなくてはいけない。
- 新規ドキュメントを作成してレイヤーをコピー、PNGとして保存する。インポートもその逆の手順を取る。
- フォトショップにレイヤーを書き出す機能があるので、そのコマンドをbatchplayする。インポートも別の機能だがあるのでこれもbatchplayする。
- 配列としてピクセル情報が取れるので、そのままファイル化してあとは外部でなんとかする。インポートも同じく。
- クリップボード経由で画像をやりとりする。
1が正解だろうか?2はちょっと避けたい。3はすぐ作れそうだけど遅いのではないか?
4がもしかして(可能なら)いいアイデア?ただし一度に画像一つしかやり取りできない。
UXPリファレンス
同様に関連しそうなところをざっくりと。
navigator.clipboard
- setContent() テキスト以外もいけるのか不明。
- getContent()
- write()
- read()
- その他
window.Blob
- type
- arrayBuffer()
- stream()
バイナリを扱うものかな?
window.WebSocket
おやメソッドが少ない。。
window.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
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
プロパティとメソッドは全部使うので省略。
そもそも自由な所にファイル作れるんだっけ。。?
まとめ
色々な制限にぶつかって自由に外部で画像処理するまで行くのに手間取りそうだ。
NEXT TODO
手を動かす詐欺終了までもうちょっと。
- ファイルを書き出している例の確認。ただしこれは保存ダイアログを使ってるぽい。使いたくない。
https://developer.adobe.com/photoshop/uxp/2022/guides/getting-started/writing-a-file/ - webソケットサンプル確認する。
https://github.com/AdobeDocs/uxp-photoshop-plugin-samples/tree/main/io-websocket-example - よくある質問みたいなページあったので確認。
https://developer.adobe.com/photoshop/uxp/2022/guides/how-to/ - fsモジュールドキュメント確認。
https://developer.adobe.com/photoshop/uxp/2022/uxp/reference-js/Modules/FileSystem/ - psjsだけでノイズフィルター作ってる例があったので実装見てみる。
https://developer.adobe.com/photoshop/uxp/2022/assets/874d23d0b54117a6e72ee98bbe79c41b/imaging.psjs - メニューからコマンド実行させる 。
- レイヤー名で画像を書き出す。
- python編へ




