0

あるドキュメントから別のドキュメントへのレイヤーの複製に問題があります。このコードがあります (Photoshop ドキュメント内の .jsx スクリプト)

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

しかし、私はまだエラーを受け取っています

エラー: 一番手前のドキュメントからのみレイヤーを複製できます。

それを機能させる方法はありますか?

4

3 に答える 3

2

エラーが発生する理由はdupObj定義されていません。1行目のソースドキュメントへの参照を使用するつもりだと思いますdocRef。これは今ではうまく機能しているようです:

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.widthandを使用できます。docRef.heightまた、レイヤーを複製すると、私の知る限り、選択に関係なくレイヤー全体がコピーされます。

新しいドキュメントを複製しているレイヤーと同じサイズにしたいだけの場合は、artLayers[i].bounds代わりに使用してみてくださいselection.bounds

于 2012-12-29T03:54:26.183 に答える
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を使用したことがありません。コードをチェックしていませんが、試してみてください。

于 2012-12-25T17:48:19.083 に答える