2013-03-09 116 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