2012-12-23 2 views
0

하나의 문서에서 다른 레이어로 레이어를 복제하는 데 문제가 있습니다. 나는 (내 포토샵 문서 내부 .jsx 스크립트)이 코드JSX 중복 레이어 adobe 포토샵

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) 
} 

을 가지고하지만 난 여전히 오류

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

당신이 어떤 아이디어가 어떻게 작동 만들어야을받는 건가요?

답변

0

활성 문서를 호출하지 않는 경우 : 현재 문서와 사용중인 문서에 대한 참조를 호출해야하므로 오류가 발생합니다.

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) 
} 

내가 문서 을 복제하기위한 CS 및 스크립트 리스너 코드를 사용할 때 내가 전에 dupObj을 사용하지 않는 한 내가 코드를 확인하지했지만, 한번 풀어 준다.

2

오류가 발생하는 이유는 dupObj입니다. 난 당신이 docRef를 사용하는 의미 생각, 라인 1. 소스 문서에 대한 참조이 지금은 잘 작동하는 것 같다 :

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) 
} 

당신이 봐야 거기에 몇 가지 숨겨진 버그가있을 수 있습니다 말했다되고있다. 이 라인에서 :

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

i는 오류를 던지고없이 0으로 분명히 기본값을 정의하지 않으며, 않습니다. 결과적으로 artLayers 배열의 첫 번째 레이어 만 복제됩니다.

또한 app.activeDocument.selection.selectAll();을 사용하여 전체 문서를 선택하므로 선택 크기를 계산할 필요가 없습니다. 항상 원본 문서와 동일한 크기입니다. 새 문서의 너비와 높이로 docRef.widthdocRef.height을 사용할 수 있습니다. 게다가, 당신이 레이어를 복제 할 때, 나는 알고있는 한, 선택에 관계없이 전체 레이어를 복사 할 것입니다.

당신은 당신이 selection.bounds

대신 artLayers[i].bounds를 사용하여 시도 복제 된 레이어와 같은 크기의 새 문서를 만들려면
관련 문제