2013-03-09 39 views
2

我想运行一个Photoshop的JavaScript尺寸并保存图像,但我想后恢复原始文件的状态,到了最后,以恢复文件到其原始状态。Photoshop中的javascript如何脚本

在Photoshop我只想回到标记历史窗格,撤消上一个命令。
我该如何在脚本中做到这一点?
,或者,什么是文件恢复到原来的状态,最好的方法是什么?

不要以为最初保存文档,它可能是在作品中的文档。

+0

我从来没有脚本的Photoshop,但你可以很容易地复制过的文件API?也许做一个重复的更改,并关闭该储蓄后是最好的方式去 – 2013-03-09 17:25:54

+0

我不知道PS JS如何完成的,但你有'this.naturalHeight' /'this.naturalWidth'(其中'this'指的是'img'元素)? – 2013-03-09 17:26:07

回答

4

答案是:

  1. 保存上一条历史命令,然后再开始:
    这是棘手的,可能并不总是有效的,因为historyStates名单也包括历史命令对应的你“撤消”显示为灰色。但是让我们假设所有最后一个命令都不是灰色的。

    history = doc.historyStates.length - 1; 
    
  2. 恢复,当你完成了历史状态:

    doc.activeHistoryState = doc.historyStates[history]; 
    
  3. 从历史中删除所有的命令生成的脚本:

    app.purge (PurgeTarget.HISTORYCACHES); 
    

您可以跳过#3,在这种情况下,您在脚本上执行的命令将保留在历史记录列表中,呈灰色(如果您重复该脚本,最终不会恢复最后的实际命令,而是执行上一个脚本的最后一个命令)。
或者为避免此问题,也可以在步骤#1之前清除历史记录灰色命令。从ScriptListener插件

3

还原图片:

var idRvrt = charIDToTypeID("Rvrt"); 
executeAction(idRvrt, undefined, DialogModes.NO); 
+0

这将使文档恢复到最后保存的状态。在某些情况下这不安全。下面的ilomambo的答案是正确的方法,因为它只会撤销您指定的命令数。 – sudo 2014-07-15 15:40:39

+0

到底是什么。谢谢。 – NER1808 2015-02-27 12:54:59

5

我避免历史状态的方法 - 我发现它并不总是有效的。相反,如果我想进行临时更改,我将复制该文档并对其进行处理。从未失败。

+0

@ anna-forest你会怎么做?我想'var docCopy = app.activeDocument'只会做一个参考副本而不是深层副本。 – damirstuhec 2015-12-28 17:55:33

+2

VAR docCopy = app.activeDocument.duplicate() – 2015-12-28 19:19:26

2

保存活动的历史状态:

var savedState = app.activeDocument.activeHistoryState 

然后,当你与你所做的一切进行:

app.activeDocument.activeHistoryState = savedState 
+1

这工作比'app.activeDocument搞乱更加可靠。历史状态“,其中包括灰色(撤消)状态。 – NateS 2017-09-30 22:16:24