Ps运用脚本筛选动作
时间: 2025-01-04 13:19:22 浏览: 3
### Photoshop 中使用 JavaScript 脚本筛选和控制动作面板批处理操作
在 Adobe Photoshop 中,JavaScript 可用于自动化各种任务,包括通过编写脚本来实现对动作的筛选以及执行特定条件下的批处理操作。这不仅提高了工作效率还减少了重复劳动。
#### 创建并运行简单的 JavaScript 脚本以调用动作
为了能够利用 JavaScript 来管理和触发动作,可以先了解基本的动作录制机制[^3]:
1. **定义要自动化的流程**:确定哪些步骤应该被记录成一个单独的动作序列。
2. **录制新动作**:进入 `窗口` -> `动作` (Window > Actions),点击创建新的组或单个动作按钮开始录制所需的操作过程。
3. **保存动作以便后续访问**:命名该动作,并将其存储在一个易于识别的位置。
当已经准备好一系列预设好的动作之后,则可以通过下面的方式加载它们到脚本环境中去:
```javascript
// 加载指定名称的动作集
app.load(new File("~/Desktop/MyActions.atn")); // 假定动作文件位于桌面名为 MyActions.atn
```
#### 编写过滤逻辑来选择符合条件的动作项
如果希望基于某些标准挑选出部分适合当前工作的动作来进行批量应用的话,那么就需要构建相应的判断语句了。这里给出一段示范性的代码片段展示怎样遍历所有可用的动作列表并且仅保留那些满足给定属性的对象们:
```javascript
function filterActions(actionSetName, conditionFunc){
var actionSetRef = charIDToTypeID("Actn");
var desc = new ActionDescriptor();
try {
executeAction(GetData, desc, DialogModes.NO);
var actionsList = app.actions;
var filteredActs = [];
for(var i=0; i<actionsList.length;i++){
let actName = actionsList[i].name;
if(conditionFunc(actionsList[i])){
filteredActs.push(actName);
}
}
return filteredActs;
} catch(e) {
alert('Error occurred while filtering actions: ' + e);
}
}
```
此函数接受两个参数——一个是目标集合的名字字符串;另一个则是用来评估每一个成员是否合格的回调函数。它会返回由匹配条目的名字组成的数组。
#### 实施批量化作业
一旦获得了经过筛选后的有效动作清单,就可以继续规划下一步骤即实施这些选定项目的连续播放了。下面是有关如何配置一组图片作为输入源并将上述获得的结果应用于每一张素材上的实例说明:
```javascript
var files = Folder.selectDialog().getFiles(/\.(jpg|jpeg|png)$/i);
if (!files || !files.length) exit();
for(let file of files){
open(file);
// 应用之前选出的一个或多于一个动作
applySelectedActions(filteredActs);
activeDocument.close(SaveOptions.SAVECHANGES);
}
function applySelectedActions(selectedNames){
selectedNames.forEach(function(name){
playActionByName(name);
});
}
function playActionByName(actionName){
var idPl = charIDToTypeID( "Ply " );
var desc789 = new ActionDescriptor();
var idFrom = charIDToTypeID( "Fr " );
var ref1 = new ActionReference();
var idAset = charIDToTypeID( "Aset" );
ref1.putName(idAset, "Default Actions"); // 默认动作集名可根据实际情况调整
var idAnm = charIDToTypeID( "Anm " );
ref1.putName(idAnm, actionName);
desc789.putReference(idFrom, ref1);
executeAction(idPl, desc789, DialogModes.NO );
}
```
这段程序首先让用户选取一批待处理的照片文件夹路径,接着依次读取其中每一幅图像的内容,在此基础上依照先前确立的选择准则逐一激活对应的功能模块直至整个队列结束为止最后保存更改过的副本覆盖原位或者另存为其他地方。
阅读全文