JSX/Photoshop: app.activeDocument.saveAs() возвращает ошибку

Я пытаюсь сохранить activeDocument как .psd, но он возвращает эту ошибку

ОШИБКА: Произошла общая ошибка Photoshop. Эта функция может быть недоступна в этой версии Photoshop.

мой сценарий:

#target photoshop

var fileRef = new File(app.path.toString() + "/Samples/template.psd");
var docRef = open(fileRef);

//target text layer
var layerRef = app.activeDocument.layers.getByName("Text");

//user input
var newText = prompt("Editing " + layerRef.name, "enter new text: ");

//change contents
layerRef.textItem.contents = newText;

//save
var savePath = "/Samples/" + newText + ".psd";
var saveFile = new File(savePath);
var saveOptions = new PhotoshopSaveOptions();
saveOptions.alphaChannels = false;
saveOptions.annotations = false;
saveOptions.embedColorProfile = true;
saveOptions.layers = true;
saveOptions.spotColors = false;

app.activeDocument.saveAs(saveFile, saveOptions, true, Extension.LOWERCASE);
app.activeDocument.close();

то, что я хочу сделать, это в основном дублировать файл шаблона снова и снова, только заменяя содержимое текстового слоя, а затем сохраняя его под строкой, которую я заменяю в текстовом слое.

любые советы или помощь приветствуется.


person Dylan    schedule 15.02.2015    source источник


Ответы (2)


Решено

Я исправил свою проблему, работая вокруг. Я переместил сценарий и файл шаблона в каталог Photoshop и добавил app.path.toString() к выходной переменной saveFile. Таким образом, кажется, что путь нужно преобразовать в строку перед сохранением.

Пока что я не знаю, как работать вне каталога Photoshop, но у меня это работает, так что я доволен. Это довольно грубо, но я открыт для предложений. Так что, если у кого-то есть аналогичная проблема, они могут использовать это для справки.

#target photoshop

var loop = true;
var filePath = "/Samples/template.psd";

while(loop) {
  openTemplate(filePath);
  var layerRef = app.activeDocument.layers.getByName("Text"); //target text layer
  var newText = prompt("Editing " + layerRef.name, "enter new text: "); //user input

  if(newText == "stop") { //stop loop by entering 'stop'
    loop = false;
  }

  layerRef.textItem.contents = newText;
  var savePath = app.path.toString() + "/Samples/" + newText + ".psd";
  var saveFile = new File(savePath);
  savePSD(saveFile);
  app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);
}

function openTemplate(filePath) { //open template.psd
  var fileRef = new File(app.path.toString() + filePath);
  var docRef = open(fileRef);
}

function savePSD(saveFile) { //saveas newText.psd
  var saveOptions = new PhotoshopSaveOptions();
  saveOptions.alphaChannels = false;
  saveOptions.annotations = false;
  saveOptions.embedColorProfile = true;
  saveOptions.layers = true;
  saveOptions.spotColors = false;
  app.activeDocument.saveAs(saveFile, saveOptions, true, Extension.LOWERCASE);
}
person Dylan    schedule 15.02.2015

Я подозреваю, что проблема с вашей первоначальной попыткой заключается в том, что вы не указываете полный путь. Я всегда указываю полный путь, даже если это временное место, например «/c/temp/myfile.psd».

person Anna Forrest    schedule 15.02.2015