aardio 文档
aardio 范例: Photoshop COM 控制演示
import com;
import win.ui;
/*DSG{{*/
var winform = win.form(text="Photoshop COM 控制演示";right=549;bottom=349)
winform.add(
btnExecuteJS={cls="button";text="执行JS并获取文档名";left=32;top=24;right=224;bottom=72;z=1};
btnExtractSubject={cls="button";text="一键抠图 (选择主体)";left=240;top=24;right=432;bottom=72;z=2};
editLog={cls="edit";left=32;top=88;right=512;bottom=320;edge=1;multiline=1;vscroll=1;z=3}
);
/*}}*/
// 示例 1:基础的 JS 执行与传参
winform.btnExecuteJS.oncommand = function(id,event){
// 先尝试获取已运行的 PS,获取不到再尝试启动新的
var psApp = com.GetOrCreateObject("Photoshop.Application");
if(!psApp) return winform.editLog.print("无法连接到 Photoshop,请确认已安装并正常运行。");
//默认使用 VARIANT 类型数组,避免数组参数报错“不支持的 Variant 类型”
com.SetPreferredArrayType(psApp,0xC/*_VT_VARIANT*/)
if (psApp.Documents.Count == 0) {
winform.editLog.print("当前 Photoshop 没有打开的文档。");
return;
}
// 准备要执行的 ExtendScript (JavaScript) 代码
var jsCode = /**
function getDocInfo(prefix, suffix) {
// 获取当前活动文档
var doc = app.activeDocument;
// 组合并返回字符串给 aardio
return prefix + doc.name + suffix;
}
// 调用函数,arguments 会接收来自 aardio 传进来的数组
getDocInfo(arguments[0], arguments[1]);
**/
/*
调用 DoJavaScript,函数原型:
psApp.DoJavaScript( JS代码 , 参数数组, 执行模式 )
- 传参:你可以将 aardio 数组传递给第二个参数,在 JS 内部使用全局变量 arguments 来接收。
- 返回值:JS 脚本最后执行的语句的值会返回给 aardio。
- 执行模式:通常设为 1(正常执行)。
*/
var result = psApp.DoJavaScript(jsCode, ["文档名称是:", "!"], 1/*Normal*/);
/*
在 aardio 中通过 COM 接口(Photoshop.Application)控制 Photoshop,
最核心、最强大、也是最推荐的技巧就是借助 COM 接口执行 Photoshop 原生的 ExtendScript (JavaScript)。
Photoshop 自身的 COM 属性和方法相对有限,
但它的 DoJavaScript 方法却可以直接调用 Photoshop 丰富且强大的底层 DOM 和 Action Manager API(即动作代码)。
*/
winform.editLog.print("JS 返回结果: ",result);
// 直接调用 COM 属性或方法
winform.editLog.print("COM 接口 返回结果: ",psApp.activeDocument.name)
}
// 示例 2:调用底层 ActionManager 代码实现“一键抠图”
winform.btnExtractSubject.oncommand = function(id,event){
var psApp = com.GetOrCreateObject("Photoshop.Application");
if(!psApp) winform.editLog.print("无法连接到 Photoshop,请确认已安装并正常运行。");
com.SetPreferredArrayType(psApp,0xC/*_VT_VARIANT*/);
if (psApp.Documents.Count == 0) {
winform.editLog.print("请先在 PS 中打开一张带有人物或主体的图片。");
return;
}
winform.editLog.print("正在调用 PS AI 识别主体,请稍候...");
/*
现代 Photoshop (CC 2018+) 提供了基于 AI 的“选择主体”功能。
虽然没有直接的简单函数调用它,但我们可以通过执行 JS 封装的 Action Manager (底层动作) 脚本来实现一键自动抠图(选择主体 -> 复制到新图层)。
下面这段 JS 通过底层的 executeAction 调用 PS 的“选择主体”功能,并 Ctrl+J 建立新图层
*/
var jsCode = /**
function autoExtract() {
try {
// 1. 调用“选择主体” (Select Subject)
var idautoCutout = stringIDToTypeID( "autoCutout" );
var desc = new ActionDescriptor();
var idsampleAllLayers = stringIDToTypeID( "sampleAllLayers" );
desc.putBoolean( idsampleAllLayers, false );
executeAction( idautoCutout, desc, DialogModes.NO );
// 2. 将选区内容复制到新图层 (等同于 Ctrl+J)
var idCpTL = charIDToTypeID( "CpTL" );
executeAction( idCpTL, undefined, DialogModes.NO );
return "抠图成功!已生成透明背景的新图层。";
} catch(e) {
return "操作失败或没有找到主体: " + e.message;
}
}
autoExtract();
**/
try{
var result = psApp.DoJavaScript(jsCode, null, 1);
winform.editLog.print(result);
}
catch(e){
winform.editLog.print("执行失败,请确保使用的 PS 版本支持该功能 (CC 2018 及以上)。");
}
}
winform.show();
win.loopMessage();
Markdown 格式