欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【photoshop Action Manager】动作管理器 - 用法(一)

程序员文章站 2022-05-19 15:53:56
...

一、名称解释

官方名称 Action Manager,动作管理器或者动作代理,都是指的这个。以后简称AM。

二、资料准备

三、ScriptListener Plug-In监听插件(不要用这个,继续往下看)

 .photoshop-cc-javascript-参考文档就是它为所有Photoshop DOM(文档对象模型)对象和命令提供了完整的引用。但是js脚本并不能完成所有的功能。那么就需要使用AM来实现了。

1.介绍

在使用操作管理器之前,必须安装ScriptListener插件。ScriptListener记录一个具有脚本代码的文件,脚本代码与您在UI中执行的操作相对应。
提示:因为ScriptListener会记录您的大部分操作,所以只在创建时安装ScriptListener动作管理脚本。继续安装ScriptListener不仅会创建占用硬盘内存的大文件,还会降低Photoshop的性能。
当您在Photoshop中执行一个或一系列任务时,ScriptListener会创建几个文件,其中包含代表以下内容的代码

➤ ScriptingListenerJS.log, 包含JavaScript代码
➤ ScriptingListenerVB.log, 包含VBScript代码(仅Windows)
ScriptListener在桌面上创建这些文件。

2.下载插件

https://helpx.adobe.com/photoshop/kb/downloadable-plugins-and-content.html

【photoshop Action Manager】动作管理器 - 用法(一)

3.代码分析

我们现在来看一段监听到的脚本,打开ScriptingListenerJS.log

var id19 = charIDToTypeID( "Embs" );
var desc4 = new ActionDescriptor();
var id20 = charIDToTypeID( "Angl" );
desc4.putInteger( id20, 135 );
var id21 = charIDToTypeID( "Hght" );
desc4.putInteger( id21, 3 );
var id22 = charIDToTypeID( "Amnt" );
desc4.putInteger( id22, 100 );
executeAction( id19, desc4 ,DialogModes.NO);

是不是很难懂? AM使用的四个字符的ID代码或字符串标识符(charIDs and stringIDs)。如何是字符串是否好理解点呢?请看以下链接。

【Photoshop JS脚本】强大的事件监听器脚本 - event_listener.jsx

动作管理器怎么用,官方没有具体介绍的文档,就是通过不断监听,遍历和总结。很多插件运用的脚本直接就是监听代码,原理都不懂,出现问题也不知道怎么解决。不同电脑或PS无法执行,那是因为监听代码包含一些无关数据,执行的都还可以继续精简的,剔除一些干扰代码。

比如监听的新建图层

///
(function make_21994018554688()	//新建图层
    {
    try {
        var d = new ActionDescriptor();
        var r = new ActionReference();
        r.putClass(stringIDToTypeID("layer"));
        d.putReference(stringIDToTypeID("null"), r);
        d.putInteger(stringIDToTypeID("layerID"), 4);
        executeAction(stringIDToTypeID("make"), d, DialogModes.NO);
        }
    catch (e) { if (e.number!=8007) { alert("Line: "+e.line+"\n\n"+e,"Bug!",true); throw(e); } }
    }
)();

指定分配了layerID。那么我们直接用的话不能去设置ID,应该由PS自己去分配,那么代码精简为

///
(function make_21994018554688()	//新建图层
    {
    try {
        var d = new ActionDescriptor();
        var r = new ActionReference();
        r.putClass(stringIDToTypeID("layer"));
        d.putReference(stringIDToTypeID("null"), r);   
        executeAction(stringIDToTypeID("make"), d, DialogModes.NO);
        }
    catch (e) { if (e.number!=8007) { alert("Line: "+e.line+"\n\n"+e,"Bug!",true); throw(e); } }
    }
)();