【photoshop Action Manager】动作管理器 - 用法(一)
一、名称解释
官方名称 Action Manager,动作管理器或者动作代理,都是指的这个。以后简称AM。
二、资料准备
- Photoshop CC脚本指南(PDF,744 KB)- 介绍AM三个对象ActionDescriptor,ActionList,ActionReference
- Photoshop CC JavaScript参考(PDF,1.9 MB)- 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); } }
}
)();
上一篇: 阿里云服务器搭建多仓库svn服务器
下一篇: 关于教育孩子的座右铭