Photoshop javascript脚本编写后如何恢复原始文档状态

Photoshop javascript脚本编写后如何恢复原始文档状态,javascript,photoshop,Javascript,Photoshop,我想运行一个photoshop javascript来调整大小并保存图像,但最后我想将文档恢复到原始状态 在photoshop中,我只需标记历史窗格,撤消最后的命令。 我应该如何在脚本中完成它? 或者,将文档恢复到原始状态的最佳方法是什么 不要假设该文档最初保存,它可能是正在工作的文档。答案是: 启动前保存最后一个历史记录命令: 这是一个棘手的问题,可能并不总是有效的,因为historyStates列表还包括您“撤消”的历史命令,并且是灰色的。但是让我们假设最后一个命令不是灰色的 history

我想运行一个photoshop javascript来调整大小并保存图像,但最后我想将文档恢复到原始状态

在photoshop中,我只需标记历史窗格,撤消最后的命令。
我应该如何在脚本中完成它?
或者,将文档恢复到原始状态的最佳方法是什么

不要假设该文档最初保存,它可能是正在工作的文档。

答案是:

  • 启动前保存最后一个历史记录命令:
    这是一个棘手的问题,可能并不总是有效的,因为historyStates列表还包括您“撤消”的历史命令,并且是灰色的。但是让我们假设最后一个命令不是灰色的

    history = doc.historyStates.length - 1;
    
  • 完成后恢复历史记录状态:

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

    app.purge (PurgeTarget.HISTORYCACHES);
    
  • 您可以跳过#3,在这种情况下,您在脚本上执行的命令将保留在历史记录列表中,并显示为灰色(如果您重复脚本,则最终不会恢复最后一个实际命令,而是恢复上一次脚本运行的最后一个命令)。

    或者,为了避免此问题,您也可以在步骤1之前清除历史灰显命令。

    从ScriptListener插件还原图像:

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

    我避免使用历史状态方法——我发现它并不总是很有效。相反,如果我想做临时更改,我会复制文档并处理它。永不失败。

    保存活动历史记录状态:

    var savedState = app.activeDocument.activeHistoryState
    
    然后,当你完成你正在做的事情时:

    app.activeDocument.activeHistoryState = savedState
    

    我从未编写过Photoshop脚本,但是你能通过API轻松复制文档吗?也许对副本进行更改并在保存后关闭是最好的方式。我不知道PS JS有多完整,但您是否有
    此。naturalHeight
    /
    此。naturalWidth
    (其中
    img
    元素)?这将使文档恢复到上次保存的状态。。这在某些情况下是不安全的。ilomambo下面的回答是正确的,因为它只会撤销您指定的命令数量。这正是我想要的。谢谢。@anna forest你会怎么做?我猜
    var docCopy=app.activeDocument
    只会创建一个参考副本,而不是深度副本。var docCopy=app.activeDocument.duplicate()@anna forest谢谢,那么您如何正确地丢弃重复的文档呢?谢谢。我已经很多年没有主动编写任何photoshop脚本了,但我相信我只是在关闭文档而没有保存它。这比处理
    app.activeDocument.historyState
    (包括灰色(未完成)状态)要可靠得多。