вопрос сценариев JavaScript в фотошопе - PullRequest
1 голос
/ 26 июня 2010

Этот следующий скрипт почти делает то, что мне нужно.Я пытаюсь просмотреть открытые документы, 139 из них, и сохранить их в формате JPEG.Однако ему не хватает перемещения из одного открытого документа в другой, поэтому он сохранил одно и то же изображение более 139 раз.Я предполагал, что doc.close() закроет открытый документ и даст новый фокус, но это не так.

Вот код:

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

Ответы [ 4 ]

2 голосов
/ 08 января 2012

Я знаю, что это слишком поздно, но я только что натолкнулся на этот вопрос и чувствую, что у меня может быть решение, которое кто-то в будущем может использовать. Так что здесь идет.

Одним из решений является настройка цикла for. Допустим, открыто 5 документов. app.documents.length будет равен 5. Когда вы закрываете один, длина теперь равна 4, затем 3 и т. д. Я считаю, что app.documents.length уменьшается. Когда я = 3, app.documents.length = 2. Я думаю, что итерация в обратном направлении сделает свое дело.

for (i = app.documents.length - 1; i >= 0; i--) { ... }
2 голосов
/ 26 июня 2010

В соответствии с Руководством по созданию сценариев JavaScript * Adobe Photoshop CS2 похоже, что вам необходимо присвоить свойству 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, и я не проверил это решение.

0 голосов
/ 07 сентября 2017

Вы хотите закрыть текущий выбранный (или активный) документ:

app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);
0 голосов
/ 09 мая 2013

+ 1 для решения JBIS.Я не мог понять, почему мой цикл не завершился.

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 становится короче с каждой итерацией, хотя цикл, если вы закроете документ, когда закончите.

...