2015-10-16 2 views
1

Je sais que cela a déjà été répondu pour un certain nombre de groupes (https://graphicdesign.stackexchange.com/questions/30768/combinations-and-permutations-of-photoshop-layers), mais j'ai eu du mal à l'implémenter pour un nombre variable de groupes.Enregistrement de toutes les permutations dans Photoshop en utilisant JavaScript

Mon objectif global est de pouvoir sauvegarder/exporter toutes les permutations de couches, quel que soit le nombre de groupes.

IE, si ma structure de couche était en tant que telle (tous les ci-dessous sont LayerSets):

options 
--one 
----a 
----b 
----c 
--two 
----1 
----2 
----3 
background 
--base 
--top 

je aurais besoin d'enregistrer des images pour a1, a2, a3, b1, b2 b3, c1, c2 et c3, chacun avec des noms individuels, tout en conservant le groupe d'arrière-plan intact. Le problème que j'ai est parfois il y aura 7 options différentes avec 5 choix différents ci-dessous et parfois il y aura 3 options avec un certain nombre de choix ci-dessous.

Toute aide serait très appréciée car j'ai creusé mon cerveau en essayant de résoudre ce problème depuis un certain temps maintenant.

+0

Le code que vous avez lié utilise 'app.activeDocument.artLayers.length' pour obtenir le nombre de couches; vous devrez vérifier la documentation pour obtenir le même nombre de groupes de calques; quelque chose comme 'app.activeDocument.artLayerGroups.length' peut-être? – m69

+0

J'ai trouvé qu'en utilisant 'app.activeDocument.layerSets.getByName (" options "). LayerSets.length' renvoie le nombre de groupes de calques sous options, et' app.activeDocument.layerSets.getByName ("options"). LayerSets [i] .layerSets.length' (i étant l'index approprié) renvoie le nombre de groupes de calques sous la sous-option correspondante. – MCMXCII

+0

Cela devrait vous donner toutes les informations dont vous avez besoin pour générer les permutations. Pour un nombre fixe d'ensembles principaux (comme "un" et "deux"), utilisez des boucles imbriquées qui parcourent les options (a, b, c ... et 1, 2, 3 ...); pour un nombre variable (s'il peut y avoir un "trois", "quatre" ...), utilisez un algorithme récursif. – m69

Répondre

1

Le code que vous avez lié utilise app.activeDocument.artLayers.length pour obtenir le nombre de couches; comme vous l'avez constaté, il existe une méthode similaire pour obtenir les ensembles de calques, app.activeDocument.layerSets et un moyen d'accéder aux ensembles imbriqués, app.activeDocument.layerSets.getByName("options").layerSets.
Ensemble, ceux-ci devraient vous permettre de récupérer toutes les informations dont vous avez besoin pour traverser la structure de calque et générer les permutations.

Pour basculer la visibilité des couches dans un nombre fixe de jeux (comme "un" et "deux" dans votre exemple), utilisez des boucles imbriquées qui parcourent les options de chaque jeu (a, b, c .. et 1, 2, 3 ...).

Pour un nombre variable d'ensembles (s'il peut y avoir un "trois", "quatre" ...) utilisez un algorithme récursif, qui boucle les options pour le premier ensemble, et pour chaque option récursive les options pour chaque ensemble suivant.