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

一、名称解释

官方名称 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

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); } }
    }
)();

猜你喜欢

转载自blog.csdn.net/greless/article/details/109526032