2012-12-23 1 views
0

J'ai un problème avec la duplication des calques d'un document à l'autre. J'ai ce code (script .jsx dans mon document photoshop)Couche dupliquée JSX adobe photoshop

var docRef = app.activeDocument; 
app.activeDocument.selection.selectAll(); 

var calcWidth = app.activeDocument.selection.bounds[2] -app.activeDocument.selection.bounds[0]; 

var calcHeight = app.activeDocument.selection.bounds[3] - app.activeDocument.selection.bounds[1]; 
var docResolution = app.activeDocument.resolution; 

var document = app.documents.add(calcWidth, calcHeight, docResolution); 
app.activeDocument = docRef; 

try { 
    dupObj.artLayers[i].duplicate(document, ElementPlacement.INSIDE); 
} 
catch(e) { 
    alert(e) 
} 

Mais je reçois toujours une erreur

Error: You can only duplicate layers from the frontmost document.

Avez-vous des idées sur la façon de faire fonctionner?

Répondre

0

Vous n'appelez pas le document actif: Vous devez appeler une référence au document actif et à celui que vous utilisez, d'où l'erreur.

var docRef = app.activeDocument; 
docRef.selection.selectAll(); 

var calcWidth = docRef.selection.bounds[2] -app.activeDocument.selection.bounds[0]; 

var calcHeight = docRef.selection.bounds[3] - app.activeDocument.selection.bounds[1]; 
var docResolution = docRef.resolution; 

var document = app.documents.add(calcWidth, calcHeight, docResolution); 
app.activeDocument = docRef; 

try { 
    dupObj.artLayers[i].duplicate(document, ElementPlacement.INSIDE); 
} 
catch(e) { 
    alert(e) 
} 

Je n'ai pas utilisé dupObj avant que je l'utilise CS et le code d'écoute de script pour dupliquer des documents Et je ne l'ai pas vérifié le code, mais lui donner un coup.

2

La raison pour laquelle vous obtenez une erreur est dupObj n'est jamais définie. Je pense que vous voulez dire utiliser docRef, la référence à votre document source dans la ligne 1. Cela semble fonctionner bien maintenant:

var docRef = app.activeDocument; 
app.activeDocument.selection.selectAll(); 

var calcWidth = app.activeDocument.selection.bounds[2] -app.activeDocument.selection.bounds[0]; 

var calcHeight = app.activeDocument.selection.bounds[3] - app.activeDocument.selection.bounds[1]; 
var docResolution = app.activeDocument.resolution; 

var document = app.documents.add(calcWidth, calcHeight, docResolution); 
app.activeDocument = docRef; 

try { 
    docRef.artLayers[i].duplicate(document, ElementPlacement.INSIDE); // ** changed to docRef ** 
} 
catch(e) { 
    alert(e) 
} 

Cela étant dit qu'il pourrait y avoir quelques bugs cachés là-dedans que vous devriez regarder. Dans cette ligne:

docRef.artLayers[i].duplicate(document, ElementPlacement.INSIDE); 

i est jamais définie, et apparemment par défaut à 0 sans lancer une erreur. Le résultat est que vous ne dupliquerez que la première couche du tableau artLayers.

De même, puisque vous sélectionnez le document entier en utilisant app.activeDocument.selection.selectAll();, il n'est pas nécessaire de calculer la taille de la sélection. Ce sera toujours la même taille que le document original. Vous pouvez simplement utiliser docRef.width et docRef.height comme largeur et hauteur pour le nouveau document. En outre, lorsque vous dupliquez un calque, il copiera le calque entier indépendamment de la sélection, pour autant que je sache.

Si vous voulez juste faire un nouveau document de la même taille que la couche que vous dupliquez essayez d'utiliser artLayers[i].bounds au lieu de selection.bounds

Questions connexes