只有我认为CS5脚本运行缓慢吗? 这几行需要1分钟才能执行。
for (n=0; n<app.activeDocument.layerSets.length; n++) {
app.activeDocument.layerSets[n].visible = false;
}
layerSets的数量是20。 我在Vista Home Premium系统上运行CS5.1 64位版本,AMD Athlon 64 X2双核5200+和8GB RAM。
我尝试将脚本导出为.JSXBIN,但仍需要1分钟。当CS5.1运行.JSXBIN脚本时,CS5.1的CPU使用率从3%上升到57%。
这里肯定有问题,我怎样才能加速脚本?
//谢谢
*编辑* 看来CS5自己的DOM实现就是问题所在。通过将DOM相关值读入局部变量,脚本加速了两倍以上。
var LayerCount = app.activeDocument.layerSets.length;
var LayerRoot = app.activeDocument.layerSets;
for (n=0; n<LayerCount; n++) {
LayerRoot[n].visible = false;
}
...但是,只需更改20个对象中的属性即可。任何有关优化的帮助都将受到赞赏:)
答案 0 :(得分:2)
我唯一能想到的是尝试遍历app.activeDocument.layers
中包含所有图层和组的各个图层。执行此操作时,您会注意到分组图层仍将保留其原始visible
属性,但由于其父组已隐藏而被隐藏。
#target photoshop
var myLayers = app.activeDocument.layers;
var myLayersLength = myLayers.length;
for (var i=0; i<myLayersLength; i++) {
myLayers[i].visible = false;
}
编辑:所以我在50层的400mb文件上测试了这个解决方案,它的工作时间不到一秒钟。你确定问题出在Photoshop吗?
如果你必须单独遍历每一层和子层以执行一个动作,你可以递归地执行:
#target photoshop
var doc = app.activeDocument;
findLayers(doc);
function findLayers(set) {
for (var i=0; i<set.layerSets.length; i++) {
//recursive call
findLayers(set.layerSets[i]);
//iterate sub-layers and hide
for (var j=0; j<set.layerSets[i].layers.length; j++) {
set.layerSets[i].layers[j].visible = false;
}
}
//hide top-level layers
for (var l=0; l<set.layers.length; l++) {
set.layers[l].visible = false;
}
}
我的机器需要更长的时间,约20秒,但它会击中文档中的每一层。
注意:我还测试了问题中的原始脚本,但它们不适用于未分组的图层,因为您正在遍历document.layerSets
而不是document.layers
答案 1 :(得分:1)
看看这个ps-scripts iteration over layers is slow - explanation 哪个也可以帮到你。