CS5 Ocultar capas es dolorosamente lento

¿Soy solo yo el que piensa que los scripts de CS5 son tremendamente lentos? Estas pocas líneas tardan más de 1 minuto en ejecutarse.

for (n=0; n<app.activeDocument.layerSets.length; n++) { app.activeDocument.layerSets[n].visible = false; } 

El número de layerSets es 20. Estoy ejecutando la versión CS5.1 de 64 bits en un sistema Vista Home Premium, AMD Athlon 64 X2 Dual Core 5200+ con 8 GB de RAM.

Traté de Exportar el script como .JSXBIN pero aún toma más de 1 minuto. El uso de CPU para CS5.1 va del 3% al 57% cuando el CS5.1 ejecuta el script .JSXBIN.

Debe haber algo mal aquí, ¿cómo puedo acelerar los guiones?

// Gracias

* EDITAR * Parece que la implementación DOM propia de CS5 es el problema aquí. La secuencia de commands se aceleró más de dos veces al leer valores relacionados con DOM en variables locales.

 var LayerCount = app.activeDocument.layerSets.length; var LayerRoot = app.activeDocument.layerSets; for (n=0; n<LayerCount; n++) { LayerRoot[n].visible = false; } 

… pero aún así, es demasiado time para cambiar una propiedad en 20 objects. Cualquier ayuda con la optimization sería apreciada 🙂

Lo único que se me ocurre es tratar de recorrer las capas individuales en app.activeDocument.layers que contiene todas las capas y grupos. Cuando hagas esto, verás que las capas agrupadas conservarán su propiedad visible original pero que están ocultas porque su grupo principal está oculto.

 #target photoshop var myLayers = app.activeDocument.layers; var myLayersLength = myLayers.length; for (var i=0; i<myLayersLength; i++) { myLayers[i].visible = false; } 

EDITAR: Así que probé esta solución en un file de 400mb con 50 capas y funcionó en serio en less de un segundo. ¿Estás seguro de que el problema es con Photoshop?

Si tiene que iterar a través de cada capa individual e individual de manera individual para realizar una acción, puede hacerlo recursivamente:

 #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; } } 

Esto lleva un poco más de time, ~ 20 segundos en mi máquina, pero golpeará todas las capas de un documento.

NOTA: también probé tus scripts originales de la pregunta y no funcionan en capas sin agrupar porque estás iterando a través de document.layerSets lugar de document.layers

Eche un vistazo a esta iteración de ps-scripts sobre las capas es lenta – explicación que también puede serle de ayuda.

    Intereting Posts