PSJS代码支持

功能建议 · 25 次浏览
Anlv 创建于 2天6小时前

Photoshop 23.5之后的版本支持运行.psjs格式的脚本文件,通过adobe模块,选择执行js脚本文件,然后填写psjs脚本文件的路径,可以运行成功。

不知道是否可以增加一个操作类型“执行psjs脚本”,这样就不用额外写一个脚本文件在外面了。


回复内容
CL 1小时23分钟前
#1

不太清楚有没有开放接口,等研究下看看。 直接把psjs代码放入之前执行js的地方报错么?

Anlv 回复 CL 1小时22分钟前 :

直接放入代码执行js会报错,被识别成jsx代码了。

CL 1小时11分钟前
#2

查了一下AI,目前是这样的情况,可能未来需要写一个插件通信才行?

直接回答:

没有提供专门针对 C# 的全新 COM/API 接口(例如没有 DoUXPScript 这样的新方法)。

Photoshop 的外部自动化接口(COM/ActiveX)在 23.5+ 版本中依然沿用旧版的 Photoshop.ApplicationDoJavaScript。Adobe 目前的开发重心是 UXP 插件内部的生态(如插件与宿主的通信),而不是扩展外部的 COM 接口。

但是,利用 23.5 版本引入的 .psjs 文件关联特性,你现在有 2 种新的方式 让 C# 运行 UXP 代码,而不仅仅是依靠旧的“桥接”方法。


方案 1:最推荐 - COM 接口 "桥接" (稳定控制)

这是目前在 C# 自动化项目中最稳妥的方式。虽然接口没变,但 app.doScript 的底层逻辑更新了。

C# 代码示例:

方案 2:新特性 - 命令行直接调用 (Fire & Forget)

Photoshop 23.5+ 注册了 .psjs 的文件关联。如果你的 C# 程序不需要等待返回值(即“发射后不管”),可以直接通过 Process.Start 唤起 Photoshop 执行脚本。

C# 代码示例:

方案 3:高级 - WebSocket (双向通讯)

如果你需要 C# 和 UXP 进行复杂的双向数据交换(COM 接口很难做到这点,因为它无法直接获取 UXP 的异步返回值),Adobe 官方推荐的做法是:

  1. 编写一个 UXP 插件(而不只是脚本),在 Photoshop 启动时在后台运行。

  2. 插件内开启一个 WebSocket Server (ws://localhost:xxxx)。

  3. C# 客户端 连接这个 WebSocket 发送指令。

这种方式绕过了 COM 接口的限制,是目前最现代化、性能最高的跨进程自动化方案。

总结建议

需求场景推荐方案优点缺点
现有项目维护COM 桥接 (方案 1)代码改动最小,沿用 DoJavaScript无法直接获取 UXP 脚本的返回值
简单任务/批处理命令行 (方案 2)极简,无需引用 COM 组件无法控制 Photoshop 实例,无法获取结果
复杂交互/高性能WebSocket (方案 3)实时双向通讯,完全绕过旧引擎限制开发成本高,需要编写完整 UXP 插件

你可以通过观看以下视频了解 UXP 脚本的基本运行机制,虽然是手动演示,但其原理与 C# 调用的逻辑一致:

该视频由 Adobe 官方发布,简要演示了 Photoshop 23.5 引入的 .psjs 脚本拖拽运行和弹窗功能,验证了新引擎的执行行为。

Anlv 回复 CL 59 分钟前 :

官方没有开放外部执行代码的接口,现在调试UXP代码只有通过 Adobe UXP Developer Tools 这个方法。
所以只要能跑通就很好了(我先用C#模块尝试看看)

Anlv 回复 CL 35 分钟前 :

查了一下资料,还是只能本地生成psjs文件,运行再删除。😂

回复主贴