Max*_*and 14 javascript photoshop optimization photoshop-script flash-cs5
是否只有我认为CS5脚本运行缓慢?这几行需要1分钟才能执行.
for (n=0; n<app.activeDocument.layerSets.length; n++) {
app.activeDocument.layerSets[n].visible = false;
}
Run Code Online (Sandbox Code Playgroud)
layerSets的数量为20.我在Vista Home Premium系统上运行CS5.1 64bit版本,在8GB RAM上运行AMD Athlon 64 X2双核5200+.
我尝试将脚本导出为.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;
}
Run Code Online (Sandbox Code Playgroud)
...但是,仍然需要更改20个对象中的属性.任何优化的帮助将不胜感激:)
我唯一能想到的就是尝试循环遍历其中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;
}
Run Code Online (Sandbox Code Playgroud)
编辑:所以我在一个 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;
}
}
Run Code Online (Sandbox Code Playgroud)
这需要更长的时间,在我的机器上约为 20 秒,但它会触及文档中的每个图层。
注意:我还测试了问题中的原始脚本,它们不适用于未分组的图层,因为您正在迭代document.layerSets而不是document.layers
| 归档时间: |
|
| 查看次数: |
1986 次 |
| 最近记录: |