誰說設(shè)計師不會寫代碼?超簡單Photoshop腳本語言介紹

2013-12-17    藍(lán)藍(lán)設(shè)計的小編

轉(zhuǎn)載藍(lán)藍(lán)設(shè)計(   www.bouu.cn  )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供有效的   BS界面設(shè)計 、 cs界面設(shè)計 、  ipad界面設(shè)計   、  包裝設(shè)計 、  圖標(biāo)定制 、  用戶體驗 、交互設(shè)計、   網(wǎng)站建設(shè) 、平面設(shè)計服務(wù)

來源:http://www.uisdc.com/100-things-you-should-know-about-design

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中,   請點這里 

自動化對每個設(shè)計師的工作來說是很有用的。它可以在重復(fù)的任務(wù)上節(jié)省寶貴的時間,還能夠幫我們更快捷、更容易的解決一系列問題。

你可以使用photoshop的動作來使工作流程自動化,這是很流行的,大多數(shù)人都知道并且已經(jīng)在使用的方法。今天,我們將介紹給你一種高級的自動化技巧:腳本語言。所有的這一切僅僅需要你有一點點關(guān)于JavaScript的基本知識,這對于我們中的一些網(wǎng)頁設(shè)計師往往都是具備的。

我很多年前就知道Photoshop的腳本語言,但是我?guī)讉€月前才開始決定研究它。我忽視了它是因為我認(rèn)為那是聰明的具有數(shù)學(xué)思維能力的程序員的領(lǐng)域。但是我錯了,今天我將要來告訴大家,盡管它需要一些基本的程序技巧,腳本語言并不是那么難掌握。

但是,一開始,我們得回答以下這幾個明顯的問題:

為什么我們需要腳本語言?

為什么我們在Photoshop已經(jīng)有了很棒的動作之后還要需要學(xué)習(xí)腳本語言?答案是交互性!當(dāng)你使用動作時,你不能真正的控制它在不同情況下的表現(xiàn),就像錄像帶不停的一遍又一遍的播放而沒有任何改變。

00

一個腳本語言更靈活,它表現(xiàn)形式的改變?nèi)Q于你輸入的參數(shù)或者是應(yīng)用程序的內(nèi)容。聽起來很有用?不是么?

要求

你不需要是一個會寫腳本語言的高級的程序員。我就僅僅是一個平面設(shè)計師,就像你們大多數(shù)人一樣。但是你需要對JavaScript至少有一個基本的了解,以及一些屬性和方法的經(jīng)驗去領(lǐng)悟這篇文章的大部分內(nèi)容。

01

如果你對JavaScript一點都不了解,別害怕!有很多地方你可以了解程序的一些基本知識。例如:Codecademy,有很棒的完整的交互式課程。

我使用CS5,但是這篇文章中講的也同樣適用于新版本。Adobe從CS5開始已經(jīng)沒有對其腳本API進(jìn)行更新。我會選擇看的腳本文檔版本,雖然它是cs6的.

開整

當(dāng)你開始在PS中記錄動作的時候,你設(shè)定了一個達(dá)到某一結(jié)果的步驟順序,這就是你的算法。然后你按下開始動作,在PS里面就一個接一個的重復(fù)你剛才的動作。腳本也差不多,但是不會一步一步的在PS中完成,而是你把它們一條一條的寫出來。在PS里面大多數(shù)你想要完成的動作都有相同的功能按鈕可以完成。

02

如果你需要創(chuàng)造一個動作將你的文件從原始大小放大到150%,你需要完成以下幾步:

1,打開圖像-圖像大小

2,長寬輸入150%

3,點擊確定。

同樣的腳本語言會是這樣寫:

1,為這個應(yīng)用命名為:app

2,選中文件:activeDocument

3,把這個屬性命名為重設(shè)圖像大?。簉esizeImage(width,height)

代碼就是這樣:

03

語言

有三種方式在PS里面寫腳本:在mac上用AppleScript, Windows用VBScript,或者用JavaScript在兩者上都可以。我使用第三種方式,因為它可以跨平臺,并且我有一定JavaScript的基礎(chǔ)。

工具

Adobe有它自己的寫腳本的工具,叫做:ExtendedScript Toolkit.

04

ExtendedScript Toolkit的主界面就是這樣的

這個工具包在PS里面,你可以在這個文件夾中中找到:

Mac OSX: /Applications/Utilities/Adobe Utilities CS6/ExtendScript ToolkitCS6/

Windows: C:\Program Files\Adobe\Adobe Utilities-CS6\ExtendScriptToolkit CS6(64位的Program Files(x86))

ExtendedScript Toolkit的用戶界面非常的簡單。開始寫代碼,第一步就是要在下拉菜單中選擇目標(biāo)應(yīng)用。如果PS已經(jīng)在運行,就可以看下下拉菜單旁邊的綠色鏈接圖標(biāo):

05

這個時候,你可以像這樣寫:


06

按cmd+R(或者直接在工具欄上點擊“播放”按鈕)來運行你寫的代碼。ExtendedScript Toolkit將會轉(zhuǎn)換到PS里面然后彈出提示框:


07

ExtendedScript Toolkit 有一些其他的調(diào)試代碼的不錯特性,但是這一段代碼就這樣就夠了。你可以通過:幫助-JavaScript Tools Guide學(xué)到更多如何使用它。

你可以使用任何文本編輯來寫代碼,只需要保存為.jsx格式文件就好了。你必須在PS里通過File-Scripts-Browse來找到并運行它。 或者是,在PS里面打開腳本文件。你也可以在腳本的前面加上一行代碼,這樣這個代碼就會常在PS里面打開:

08

直接保存你的代碼在 Photoshop/Presets/Scripts/,然后通過File-Scripts訪問它們。你也可以設(shè)定一個快捷鍵,前往Edit-Keyboard Shortcuts,鏈接到 File-Script-[你的代碼名稱],然后選擇一個你想要設(shè)定的快捷鍵。

ExtendedScript Toolkit可以在整合的開發(fā)環(huán)境下運行和調(diào)試代碼,同時它還有一個目標(biāo)模型指示器來安裝,這是很有用的。所以我推薦使用toolkit來寫腳本。不幸的是,Mac版本的有時候會崩潰,所以要記住這一點。

Photoshop對象模型

為了使腳本寫起來簡單些,你需要懂得在Photoshop文件對象模型(DOM)中事件是怎樣互相聯(lián)系的。如果你觀察PS本身,理解起來并不困難。PS的DOM里面最主要的對象就是應(yīng)用程序。在應(yīng)用程序里面,我們有一個文件夾在PS里面是當(dāng)前打開的。

每一個文件包含一些元素:例如圖層(被稱為Artlayers),圖層組(layerSets),通道,歷史記錄等等–就像一個普通的PSD文件。

下面就是一個簡單的可視化的PS的DOM。更詳細(xì)的包含層級的可以在”Adobe Photoshop CS6 Scripting Guide”Pdf文件中12頁里找到。

09

一個簡單的可視化的Photoshop DOM

這里面的每一個目標(biāo)都有它自己的屬性和方法你可以編輯它。例如,在一個文件中改變所選圖層的透明度,你就可以前往Application-Document-layer-Opacity然后選擇你的期望值。代碼就是這樣寫:

10

你應(yīng)該可以猜到,activeDocument和activelayer決定了當(dāng)前選擇的文件和圖層。

你可以在“Adobe Photoshop CS6 JavaScript Scripting Reference”PDF文件中找到大部分的目標(biāo)和它們的屬性和方法的說明,或者在ExtendedScript Toolkit中通過前往help-object Model Viewer.

讓我們來看看在一個真實的例子中是如何運行的。在接下來的段落中,我們將會基于一個動作寫一段我們自己的代碼。

用代碼來重現(xiàn)自我旋轉(zhuǎn)動作

幾年前的圣誕節(jié),我有一個想法就是用動作幫助我畫一個雪花。

畫雪花

1,首先畫一支雪花的圖案。

11

2,復(fù)制這一支,同時旋轉(zhuǎn)一定的角度。


12

3,重復(fù)第二步直到一個完整的圓。


13

手動去復(fù)制和旋轉(zhuǎn)每一個元素非常麻煩,所以我想出了一個自動的動作(an action to automate it)去完成它。算法是這樣的:

1,復(fù)制元素。

2,使用變化工具按照你所選擇的角度去旋轉(zhuǎn)這個元素。

3,復(fù)制圖層。

4,使用“重復(fù)變換”功能。

5,重復(fù)動作4和5直到一個完整的圓。

非常不錯!但是這個動作有一個缺點:根據(jù)你在第三步設(shè)定的角度數(shù)值的算法,你只能設(shè)定一定數(shù)量的雪花的分支。

回到當(dāng)我還不是很熟悉腳本的時候,我做了幾個版本的動作,每一種產(chǎn)生的雪花都是不同的分支數(shù)。

今天,我們將用你輸入分支的數(shù)值的動態(tài)腳本來重繪這個動作,讓我們開始吧。

算法

當(dāng)你開始寫腳本的時候,在挖掘代碼本身之前先設(shè)定算法是個不錯的主意。在我們的情況下,算法將會是這樣的:

1,詢問用戶輸入分支的數(shù)目。

2,計算旋轉(zhuǎn)的角度。

3,通過第一步設(shè)定的數(shù)目來復(fù)制并旋轉(zhuǎn)圖層。

首先讓我們從把當(dāng)前或選定的圖層作為變量保存起來,為了將來使用:

14

在JavaScript 中注意,你可以標(biāo)記兩條雙斜線(//)做注解。注解被用來為未來相關(guān)部分的代碼做解釋但是不影響腳本的運行。

現(xiàn)在讓我們回到我們的算法上。

1,要求用戶輸入

我們通過prompt(message,defaultvalue[,tittle])這個功能來獲取用戶的輸入信息:。這個功能表明一個有著”message”對話框和一個包含這”fefault value”的輸入框。當(dāng)用戶點擊“確定”,這個給你功能就回到輸入值;因此,我們需要保存它為一個可是用的變量。

15

注意我使用了“orginalStem.name”在這段信息里面。所以對話框會現(xiàn)實所選擇圖層的名稱。

在Mac OS X中,在信息中的第一行是寬的,作用是標(biāo)題。因此,我們主要的信息應(yīng)該在第二行。另起一行,輸入“\n”.

在Windows中,你可以在功能中指定第三種參數(shù)來設(shè)定一個標(biāo)題:

16

如果我們在PS中運行這個代碼,將會看到這樣一個對話框:


17

當(dāng)用戶點擊“確定”,輸入值將會保存到stemsAmount變量中。如果用去點擊“取消”,這個功能將會返回一個無效值。這個我們后面要使用到。

2,計算旋轉(zhuǎn)的角度

為了計算旋轉(zhuǎn)的角度,我們需要通過分支的數(shù)目來分360度(一個整圓):

18

3,復(fù)制和旋轉(zhuǎn)

現(xiàn)在我們已經(jīng)有了我們需要復(fù)制的分支的一切。為了這樣去做,我們將使用“for”循環(huán)。它可以讓我們按照我們想要的次數(shù)來反復(fù)的運行一段代碼。我們的循環(huán)將會是這樣的:

19

注意第一個在程序中的對象例子已經(jīng)有了值為0,但是因為我們第一個圖層已經(jīng)在畫布上了,我們從1開始這個循環(huán)。

為了輔助和旋轉(zhuǎn)我們的圖層,我們將會使用:duplicate()和rotate(angle,AnchorPosition)函數(shù):在angle里面被旋轉(zhuǎn)圖層的數(shù)目通過復(fù)制的指數(shù)相乘而得。 Anchorposition決定了哪個圖層將會旋轉(zhuǎn)的點。當(dāng)你在PS中使用旋轉(zhuǎn)工具的時候你可以看到這個點—它看起來是一個小小的加了十字的圓圈。在腳本中,它僅有9個指定的值-i.e.9個位置的錨點:

20

在我們這個情況下,它是這個圖層按鈕的中心。BOTTOMCENTER. PS在這里或那里的一些功能上使用了很多其他的一些常量,你可以在”Adobe Photoshop CS6JavaScript Reference”PDF文件中的197頁找到。因此我們的循環(huán)就是這個樣子:


21

完整的代碼就是下面這個樣子,你可以試著運行:


22

最后的潤色

我通常會試著使用腳本來完成我的主要目的。當(dāng)一切都正確的運行起來的時候,我將會開始優(yōu)化代碼。在我們這種情況下,我們需要確保用戶在提示框中輸入一個有效的數(shù)值—i.e.一個正整數(shù),而且要大于1。

當(dāng)然,為了不讓PS瘋掉,我們會限制分支的書目,我們規(guī)定,小于100.為了這么做, 當(dāng)他們提交了一個無效的數(shù)值的時候 ,我們需要使用一個“while”循環(huán)來告訴用戶一個錯誤的信息。而且這個提示框?qū)恢贝嬖冢钡接脩糨斎胍粋€有效值或者點擊“取消”按鈕。(記住如果用戶點擊取消將會提示無效值)。

新的代碼將會是這樣的:

23

你可能注意到:我們使用了“isNaN(value)”這個功能,它返回 “true”如果 “value”不是一個數(shù)字,同時當(dāng)我們計算旋轉(zhuǎn)的角度的時候,“parseInt(value)”把“value”轉(zhuǎn)換成一個整數(shù)。

接下來我們要做的事情是管理圖層,通過為它們增加一個索引來重命名我們的圖層。同事也要確保我們不會把文件的圖層搞亂,讓我們把我們的分支編組。

為圖層重命名不是一個很難的事情。我們只需要使用圖層的“name”屬性,然后為它們增加一個索引數(shù)字:

24

PS應(yīng)用程序界面里的編組被稱為“LayerSet”,我們通過“l(fā)ayerSets”屬性可以進(jìn)入文件的所有編組。為了給文件增加一個新的組,我們需要稱“l(fā)ayerSet”方法為“add()”:


25

然后,為了把一個圖層增加到組里面,我們會使用“move(relativeobject,ElementPlacement)”函數(shù)。請注意,“move()”函數(shù)只是把圖層移動到圖層堆,而不是移動到畫布上。(你可以用“trabslate(deltaX[,deltaY])”函數(shù)把圖層移動到畫布上)

ElementPlacement是另外一個常量,這個常量決定我們怎樣把的圖層跟 relativeobject 關(guān)聯(lián)在一起。在我們的案例里,我們使用ElementPlacement.INSIDE 把一個普通圖層放進(jìn)一個組里面:

26

我們使用 ElementPlacement.PLACEATEND.把每一個拷貝的新圖層放在所有圖層租的底部。結(jié)果就是我們的所有圖層都是以上升的順序排列,第一個圖層在頂部,最后一個圖層在底部:


27

你可以在”Adobe Photoshop CS6 Scripting Guide”Pdf文件中202頁里

找到更多關(guān)于“ElementPlacement”的內(nèi)容。

最終代碼

就是它,RotateMe.jsx搞定! 我們最終的代碼就是這樣:

28

29

沒那么難,哈?


30

現(xiàn)在,你可以把這個保存在photoshop/presets/Scripts/文件夾里面,然后前

往File-Script運行。使用不同的形狀和不同的賦值可以產(chǎn)生有趣的結(jié)果:

31

總結(jié)

你可以從在后面的資源包里面鏈接序號看到,除了文章中介紹的之外還有很多想要講的。但是我希望我們今天所講的能夠激發(fā)你的興趣,向你展示了腳本的作用和巨大潛力。

32

如果你想下水試試,讓我們一起來學(xué)習(xí)和交流經(jīng)驗吧。你在后面的評論中提出問題或者分享你所做的。如果你不是一個程序員,可以考慮留下一個關(guān)于腳本編寫的好主意吧!或許其他的讀者會實現(xiàn)它。讓我們一起來使PS更加有用吧!

資源

1,Adobe Photoshop Scripting ,Adobe Developer Connection

所有的腳本文件和實用功能

2,Adobe Introduction to Scripting ,(PDF),Adobe

這個是一些Adobe應(yīng)用程序的基本代碼。不錯的是PS的腳本可以適用于所有的其他Adobe產(chǎn)品,你只需要學(xué)習(xí)應(yīng)用的DOM,你就可以上路了。

3,Adobe Photoshop CS6 Scripting Guide ,Adobe

在這個PS腳本介紹指南里面,你可以學(xué)到寫腳本的基本知識。

4, Adobe Photoshop JavaScript Reference ,(PDF),Adobe

這個文件描述了你可以在PS里面用到的所有的對象和他們的函數(shù)以及方法。這也是我在寫腳本的時候用的最多的文件。

5, JavaScript, Mozilla Developer Network

這里面有關(guān)于一般的JavaScript函數(shù)和用法的各種問題的答案。

6,JavaScript Tools Guide, PDF,Adobe

這里面有一些關(guān)于“ExtendedScript Toolkit”的基本信息,和一些高級技

巧。例如文件系統(tǒng)的存取,ScriptUI, XML的使用,sockets等等。

7,PS-Script

一個獨立的關(guān)于PS腳本的論壇。我不能注冊參與討論(因為某些未適應(yīng)系統(tǒng)),但是它有很多可以被發(fā)現(xiàn)的解決問題的答案。

8, Photoshop Scripting,Adobe Community

Adobe的PS腳本官方論壇,有一些很好的在用戶使用的過程中遇到的問題的討論。

原文地址:smashingmagazine
譯文地址:mxd.tencent

編譯:騰訊timmliu  校正:sevenshao&charrywang

分享本文至:

日歷

鏈接

個人資料

存檔