(5) Script 法:此法為終極用法,應該沒有其他方式比此法更有彈性,更具威力,但難度也更高,強烈建議使用photoshop 7.0
依據photoshop說明要用此法可使用VBscript(windows os),appleScript(mac os)及javaScrpt三種,其實使用方式很多,因為
photoshop已成為COM Automation Server,只要你所用的語言支援COM Automation Client接可用,例如C++,perl,Word VBA,Excel VBA.....
小弟以VBscript為例,而使用VBscript至少尚有三種方式:windows內建VBscript法.VBA法(要有MS Office).VB法(要有Visual Basic)
小弟再將範圍縮小為windows內建VBscript法,因為此法免費,不必再買MS office或Visual Basic
0. 先期作業:本例要求先裝好 Windows VBscript Host 及 photoshop scripting 1.0.2a,前者為windows OS內建於較新版本上(98,me,2000,xp)
如果沒有(95,nt4)請至
http://msdn.microsoft.com/scripting網站下免費下載,而後者沒有內建於photoshop內 請至Adobe網站
http://www.adobe.com/support/downloads免費下載,且安裝時不會檢查序號 1. 建議工作目錄(例如c:\temp)
2. 將input.psd copy至此目錄下
3. 請使用notepad鍵入big.vbs檔如下
'CopyLeft 版權沒有 翻拷不究
Dim appRef
Dim docRef
Set appRef = CreateObject("Photoshop.Application")
appRef.DisplayDialogs = 3
appRef.Preferences.RulerUnits = 2
Set docRef = appRef.Open("c:\temp\input.psd")
docRef.Selection.SelectAll
docRef.Selection.Copy
docRef.Selection.Deselect
Set docRef = appRef.Documents.Add(6, 4, 300, "output.psd")
Dim xmax, ymax
Dim i, j
Dim x, y
xmax = 6 / 1.5
ymax = 4 / 2
For j = 1 To ymax Step 1
For i = 1 To xmax Step 1
x = (i - 1) * 1.5
y = (j - 1) * 2
docRef.Paste
'docRef.ActiveLayer.ApplyOffset x - 2.25, y - 1, psOffsetWrapAround
docRef.ActiveLayer.ApplyOffset x - 2.25, y - 1, 2
Next
Next
appRef.ActiveDocument.SaveAs ("c:\temp\output.psd")
appRef.Quit
4. 於檔案總管中雙擊big.vbs以執行此script,此時不必執行photoshop
5. script會自動載入photoshop,執行應有的動作,關閉photoshop
6. 最後結果在output.psd檔案上
此程式請容劣者不作說明,因為懂Script者不屑看,不懂Script者說了或許也滿臉疑慮
相信我,Script將是photoshop自動化的終極工具,無所不能,無所不至
◎另檢附VB法的程式部份,有Visual Basic請不吝參考
Private Sub big_Click()
Dim appRef As Photoshop.Application
Dim docRef As Photoshop.Document
Set appRef = CreateObject("Photoshop.Application")
appRef.DisplayDialogs = psDisplayNoDialogs
appRef.Preferences.RulerUnits = psInches
Set docRef = appRef.Open("c:\temp\input.psd")
docRef.Selection.SelectAll
docRef.Selection.Copy
docRef.Selection.Deselect
Set docRef = appRef.Documents.Add(6, 4, 300, "output.psd")
Dim xmax, ymax As Integer
Dim i, j As Integer
Dim x, y As Double
xmax = 6 / 1.5
ymax = 4 / 2
For j = 1 To ymax Step 1
For i = 1 To xmax Step 1
x = (i - 1) * 1.5
y = (j - 1) * 2
docRef.Paste
docRef.ActiveLayer.ApplyOffset x - 2.25, y - 1, psOffsetWrapAround
Next
Next
appRef.ActiveDocument.SaveAs ("c:\temp\output.psd")
appRef.Quit
End Sub