Photoshop 2022 UXP save.as メソッド entry class

UXP

Photoshop 2022 になってUXPに待望のsave.asメソッドが追加されました。これはPhotoshopで開いているファイルをjpe,tiffなどの決まったフォーマットで保存できるメソッドで前回までbatch playを通さないとできなかった保存処理がdocumentのオブジェクトモデルに追加されました。しかしこちらの記事でも説明した通りにstring型の保存パスをそのまま渡しただけですとエラーが返ってきます。公式ドキュメントでも触れられていますようにentryオブジェクトを渡さなければいけません。entryオブジェクトに関しては公式ドキュメントのこちらに詳細が載っています。とはいえ他のjsと比べて異なるファイルシステムに戸惑うとは思うので今回保存メソッドの手順を載せます。

entry型のファイルパス

entry型のファイスパスですが最初の手順としてダイアログを表示してユーザーにファイルパス、もしくはフォルダーパスを選択してもらいます。

fs.getFolder()メソッドでフォルダーを選ぶダイアログが表示されて選択後にユーザーの選んだフォルダーパスのentryを取得します。この時取得したファイル群の中身を見るとstring型ではない特殊なentry型のUXP独自の型のファイルになります。このentry型を通さない限りPhotoshopの保存処理などUXP上では一切できません。またこの時オプションとしてinitialDomainプロパティーにdomainオブジェクトを渡すことによりデフォルトのダイアログのフォルダーパスを指定することができます。

ただしのこdomainオブジェクトも予め決められたものしかありません。詳しくは公式ドキュメントを参照。またfolderではなくファイルパスを取得したい場合も別途メソッドがあります、こちらは保存用と開くためのメソッドがありますので用途に応じて使い分けてください。

保存用にファイルパスを取得。getFileForSavingメソッドの引数にはデフォルトのファイル名を渡しています。

getFileForOpeningはファイルを開くためのentryファイル取得メソッドです。このサンプルでは開いた複数のファイルを全てPhotoshopで開きます。

それでファイルパスを取得する入口となるメソッドがダイアログから取得するものしかないと前回の記事でも説明しましたがおそらく現在もstring型のパスをentry型に変える手段はないと思われます。しかしentryフォルダーパスからその他のentryファイル、フォルダーを探すことは可能です。

このように起点となるフォルダーさえ選択してしまえば後から他のjsと同じようにファイルやフォルダーの取得が可能です。ここまで来れば慣れた方ならおおよそどのように取得するか把握できるでしょう。

ダイアログから取得したentryフォルダーから再帰的にファイルを取得する関数です。非同期処理に慣れたからたならなんてことのない再帰的関数ですね。entryオブジェクト自身、isFileとisFolderでファイルかフォルダーかbooleanを返してくれるので簡単に分けることが可能です。その他取得したentryフォルダーに指定のファイル名で画像を書き出す事も可能です。

entryfolderオブジェクトが保持するcreateEntryメソッドはstring型のファイル名を渡す事によりentryフォルダーパスとファイル名を結合したパス(要するにnodeでいうpath.joinメソッドのようなもの)をもったentryファイルオブジェクトを返してくれます。ダイアログで指定のフォルダーさえ取得すればscript側で決まったファイル名の保存が可能になります。

以上でentryオブジェクトを通したファイルシステムでした。現状ダイアログの呼び出しが絶対必要なので不便ではありますがとりあえず多少はファイルの保存やファイルを開く操作ができるのはわかっていただけたかと思います。

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