首页 > 解决方案 > 如何使用 JS 代码脚本在 Photoshop 中暂停/恢复?

问题描述

我目前正在尝试使用 JS 代码脚本在 Photoshop(最新版本)中自动执行某项任务。每个过程是 1. 加载图像 -> 2. 做某事 -> 3. 执行操作 -> 4. 保存图像 -> 5. 重复此操作。很简单,对吧?切入正题,下面是我的代码片段。

var opts;
opts = new ExportOptionsSaveForWeb();
opts.format = SaveDocumentType.PNG;
opts.PNG8 = false;
for(var i = 1; i < 6; i ++){
        var filename = '/Users/abcde/Desktop/ap/' + i.toString() + '.PNG';
        var file = File(filename);
    var document = app.open(file);
    // do something in Photoshop manually !!
    app.doAction('bbbb', 'aaaa');
    var savename = '/Users/abcde/Desktop/ap_save/' + i.toString() + '.PNG';
    var savefile = new File(savename)
    app.activeDocument.exportDocument(savefile, ExportType.SAVEFORWEB, opts);
}

所以,我的问题是如何在加载图像并执行某些操作时暂停程序,并获得像“w”这样的输入键并再次恢复整个过程?

带着我的问题,代码片段将如下所示

var opts;
opts = new ExportOptionsSaveForWeb();
opts.format = SaveDocumentType.PNG;
opts.PNG8 = false;
for(var i = 1; i < 6; i ++){
    var filename = '/Users/abcde/Desktop/ap/' + i.toString() + '.PNG';
    var file = File(filename);
    var document = app.open(file);
    // pause this code script (which type of code can I put in here?)
    // do something(I'm going to do something manually in the Photoshpp when this script's been paused, this part doesn't has to be written in code)
    // resume when it gets a key input(I want to type 'w' when that something task has been done, again.. which type of code function can I put?) 
    app.doAction('bbbb', 'aaaa');
    var savename = '/Users/abcde/Desktop/ap_save/' + i.toString() + '.PNG';
    var savefile = new File(savename)
    app.activeDocument.exportDocument(savefile, ExportType.SAVEFORWEB, opts);
}

请帮我。如果无法构建或者我需要进一步澄清这个问题,也请告诉我。谢谢。

标签: javascriptphotoshop

解决方案


我会重组脚本以首先运行导出(如果已经打开了一个文件,然后打开下一个文档。然后,当脚本完成后,用户可以在 Photoshop 中对打开的文档做一些事情。一旦他们完成有了这个,他们再次运行脚本。

这需要一些额外的检查,如果有一个文档已经打开,以及是否还有任何文件需要处理。但它基本上看起来像这样:

// set export options
var opts;
opts = new ExportOptionsSaveForWeb();
opts.format = SaveDocumentType.PNG;
opts.PNG8 = false;


// find out, which destination files already exists, to know which new one to open
// increase i until it finds an index that does not exist yet
var i = 1;
while( File('/Users/abcde/Desktop/ap_save/' + i.toString() + '.PNG').exists ) {
  i++;
}


// if a document is already open, run the action on it and export it
if(app.documents.length) {
  app.doAction('bbbb', 'aaaa');
  var savename = '/Users/abcde/Desktop/ap_save/' + i.toString() + '.PNG';
  var savefile = new File(savename)
  app.activeDocument.exportDocument(savefile, ExportType.SAVEFORWEB, opts);
  app.activeDocument.close();
  // increase i once more to jump to the next file
  i++;
}



// try to open a new source file, if there is one left
var srcFile = File('/Users/abcde/Desktop/ap/' + i.toString() + '.PNG)'

if(!srcFile.exists) {
  // no further source file does exist, exit the script
  exit();
}

var document = app.open(file);

// script ends here and the user can do stuff
// and then use a hot key to run the script again

推荐阅读