javascript - 如何使用 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);
}
请帮我。如果无法构建或者我需要进一步澄清这个问题,也请告诉我。谢谢。
解决方案
我会重组脚本以首先运行导出(如果已经打开了一个文件,然后打开下一个文档。然后,当脚本完成后,用户可以在 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
推荐阅读
- hyperledger-fabric - Convector env:restart throws cryptogen: 无法执行二进制文件
- spring-boot - 在 Spring Boot 应用程序中访问基于 google Guice 的服务
- c# - 我需要将数据库数据传递给 listview
- javascript - 如何将值推送到 v-model 单击按钮
- bash - 用于创建多行文件的 Bash 别名或函数
- asp.net-web-api - 具有 LUIS 意图的替代方法
- python - 检查部分字符串列表是否在单个字符串中?
- python - Pyspark 为包含时间范围的记录创建多行
- dask - 演员和幕后工作者
- kubernetes - 如何从 Kubernetes 在容器中设置环境变量?