Photoshop JavaScriptスクリプトで別のドキュメントを集中するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/3122863

質問

この次のスクリプトは、私が必要とするものをほぼ行います。私がやろうとしているのは、開いた文書、139のドキュメントを調べて、JPEGとして保存することです。しかし、それが欠けているのは、1つの開いたドキュメントからもう1つのドキュメントに移動するため、同じ画像を139回以上保存しました。私は仮定しました doc.close() 開いたドキュメントを閉じて、新しいOne Focusを提供しますが、そうではありません。

これがコードです:

var destination = "C:/Documents and Settings/Administrator/My Documents/small images"
for(var i = 0; i < 5; i++)
{
    doc = documents[i];
    name_ = doc.name.substring(0, doc.name.indexOf('.'))
    saveForWebPNG(destination, name_);
    doc.close();
}

function saveForWebPNG(outputFolderStr, filename)
{
    var opts, file;
    opts = new ExportOptionsSaveForWeb();
    opts.format = SaveDocumentType.JPEG;
    opts.quality = 60;
    if (filename.length > 27) {
        file = new File(outputFolderStr + "/temp.jpg");
        activeDocument.exportDocument(file, ExportType.SAVEFORWEB, opts);
        file.rename(filename + ".jpg");
    }
    else {
        file = new File(outputFolderStr + "/" + filename + ".jpg");
        activeDocument.exportDocument(file, ExportType.SAVEFORWEB, opts);
    }
}
役に立ちましたか?

解決

による Adobe Photoshop CS2 JavaScriptスクリプトガイド に割り当てる必要があるようです Application.activeDocument その文書を作成するためのプロパティは、現在選択されているものをあらゆるアクションにします。あなたがそのプロパティを使用しているので、これは理にかなっています saveForWebPNG 最初のブロックでイテレーターのドキュメントを明示的にアクティブ化することなく機能します。次の変更と同じくらい簡単かもしれません。

for (var i = 0; i < 5; i++) {
  var doc = documents[i];
  app.activeDocument = doc; // Select that document.
  var name = doc.name.substring(0, doc.name.indexOf('.'))
  saveForWebPNG(destination, name);
  doc.close();
}

ただし、Photoshopのコピーはなく、このソリューションを確認していません。

他のヒント

私はこれがずっと遅いことを知っていますが、私はこの質問に出会ったばかりで、道を進んでいる誰かが使用できるという解決策があるかもしれないと感じています。だからここに行きます。

1つの解決策は、forループを調整することです。 5つのドキュメントが開いているとしましょう。 app.documents.lengthは5になります。1つを閉じると、長さは4、次に3などになります。私はapp.documents.length.lengthが減少しています。 i = 3、app.documents.length = 2の場合。

for (i = app.documents.length - 1; i >= 0; i--) { ... }

Jbizのソリューションの+1。なぜループが完了しないのかわからなかった。

for (i=app.documents.length-1; i >= 0; i--) {
  doc = app.documents[i];
  app.activeDocument = doc;

  ...
  do whatever you need, save & close
  ...
}

app.documents.lengthは、ドキュメントを終了したときに閉じた場合、ループを繰り返します。

現在の選択(またはアクティブな)ドキュメントを閉じます。

app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top