日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

30分鐘上手Photoshop腳本

 長(zhǎng)生閣 2022-05-22 發(fā)布于安徽

本文目的:

30分鐘之內(nèi)讓你明白如何利用Photoshop(以下簡(jiǎn)稱(chēng)PS)腳本編寫(xiě)常用插件或工具,提升工作效率。

如果你是前端工程師或視覺(jué)設(shè)計(jì)師,強(qiáng)烈建議你駐足30分鐘,日后為人你節(jié)約的時(shí)間,或許是30天!

寫(xiě)在前面:

本文非掃盲貼,如果你還不清楚腳本與動(dòng)作的區(qū)別,請(qǐng)自行搜索;

本文使用Javascript作為PS腳本開(kāi)發(fā)語(yǔ)言,如果你還完全不懂Javascript,請(qǐng) 點(diǎn)擊;

本文中的實(shí)例測(cè)試運(yùn)行環(huán)境為Photoshop CS5,如何低于該版本,可能支持不完全。

PS腳本具體能干什么?

自動(dòng)導(dǎo)入設(shè)計(jì)稿固定頭尾部;

自動(dòng)生成規(guī)定寬度的參考線;

提取PSD中的文本內(nèi)容及樣式;

自動(dòng)導(dǎo)出ICON、按鈕、切割背景圖;

等等大部分操作都可以自動(dòng)完成。

比如我已完成一個(gè)PSD2HTML插件iParser。

準(zhǔn)備工作:

1、運(yùn)行Adobe ExtendScript Toolkit(強(qiáng)烈推薦使用該編輯器,Adobe套裝已默認(rèn)安裝)

2、新建文件并粘貼以下代碼。

alert('恭喜!測(cè)試通過(guò)。');

3、保存至 Photoshop安裝目錄\Presets\Scripts,命名為test.jsx。

4、運(yùn)行Photoshop,選擇 文件>腳本>test 執(zhí)行腳本。

如果看到了警告窗口,那你已經(jīng)準(zhǔn)備就緒。

實(shí)例一:入門(mén)

preferences.rulerUnits = Units.PIXELS;  
var docRef = app.documents.add(200, 200);  
var layer = docRef.artLayers.add();<br>layer.name = 'footer';
 
實(shí)例二:對(duì)話框
如果開(kāi)發(fā)為插件,我們通常需要根據(jù)用戶輸入的信息執(zhí)行腳本,這時(shí)候我們就需要用到對(duì)話框。
var dialogStr ="dialog { \  
    text:\ '新建模板',\  
    name:Group{\  
        label: StaticText {text:'名稱(chēng):' }, \  
        input: EditText { preferredSize: [220, 20], text: 'test'} \  
    }\  
}";  
var win = new Window(dialogStr);  
win.center();<br>win.show();
 
Photoshop對(duì)象模型:
和瀏覽器中的文檔對(duì)象模型DOM類(lèi)似,Photoshop也有它的對(duì)象模型:



常用類(lèi)型與方法簡(jiǎn)介:
[Application](app):相當(dāng)于瀏覽器中的window,它是對(duì)象模型的根,并提供訪問(wèn)所有其他對(duì)象的接口。
activeDocument[Document]:當(dāng)前操作文檔
documents[Documents]:當(dāng)前打開(kāi)文檔的集合
preferences[Preferences]:首選項(xiàng)設(shè)置
executeAction:動(dòng)作管理器。當(dāng)你發(fā)現(xiàn)你要實(shí)現(xiàn)的功能沒(méi)有直接的API時(shí),你可能可以用它來(lái)完成,它提供了PS低級(jí)別的訪問(wèn)。
[Application]-[Document]:圖層集合的容器
artLayers:藝術(shù)圖層集合(最常見(jiàn)的普通圖層)
layerSets:圖層組集合
layers:包括artLayers與layerSets的集合
[Application]-[Document]-[ArtLayer]:操作最頻繁的對(duì)象,訪問(wèn)圖層信息,對(duì)圖層的任何操作都能過(guò)這個(gè)對(duì)象
bounds:獲取圖層邊界坐標(biāo)
grouped:是否在圖層組內(nèi)
linkedLayers:鏈接的圖層
textItem:獲取圖層中的文檔需要通過(guò)textItem.contents
*參考文檔見(jiàn)附件
 
請(qǐng)瀏覽一遍參考文檔,并嘗試完成一個(gè)工具:
題目:完成一個(gè)設(shè)計(jì)稿模板。
功能點(diǎn):自動(dòng)導(dǎo)入公共頭部(居頂)、生成980px的參考線、導(dǎo)入公共尾部(居底)
參考方法:
app.documents.add  
doc[Document].guides.add  
doc[Document].selection.select  
doc[Document].selection.fill  
doc[Document].selection.copy  
layer[ArtLayer].textItem.*  
file[File].*  
color[SolidColor].*  
layer[ArtLayer].move
 
常見(jiàn)問(wèn)題解答:
如果你已經(jīng)嘗試用腳本完成一些功能,可能碰到了一些問(wèn)題,比如PS的文檔模型似乎并沒(méi)想像中的完美,參考文檔不詳盡,甚至存在錯(cuò)誤,那參考一下我曾碰到過(guò)的一些問(wèn)題。
1、如何創(chuàng)建一個(gè)選區(qū)?
答:doc[Document].selection.select([[x1, y1], [x1, y2], [x2, y2], [x2, y1]]);
注:之所以把它當(dāng)成一個(gè)問(wèn)題,是因?yàn)槲臋n中未提及具體參數(shù),極易弄錯(cuò)。它的坐標(biāo)順序是(左上、左下、右下、右上)。
2、如何獲取選中的圖層/組?
答:這是一個(gè)學(xué)習(xí)過(guò)程中必犯的錯(cuò)誤,你肯定會(huì)嘗試doc[Document].activeLayer,但該方法只獲取到當(dāng)前激活的圖層,并不能獲取到所有選中的圖層。
正確答案-
a、臨時(shí)圖層組中轉(zhuǎn)(低效,低風(fēng)險(xiǎn))。
getSelectedLayer: function(){  
    var A=[];  
        var desc11 = new ActionDescriptor();  
            var ref9 = new ActionReference();  
            ref9.putClass( stringIDToTypeID('layerSection') );  
        desc11.putReference( charIDToTypeID('null'), ref9 );  
            var ref10 = new ActionReference();  
            ref10.putEnumerated( charIDToTypeID('Lyr '), charIDToTypeID('Ordn'), charIDToTypeID('Trgt') );  
        desc11.putReference( charIDToTypeID('From'), ref10 );  
        executeAction( charIDToTypeID('Mk  '), desc11, DialogModes.NO );  
    var gL = activeDocument.activeLayer.layers;  
    for(var i=0;i<gL.length;i++){   
        A.push(gL[i]);   
    }   
    executeAction( charIDToTypeID('undo'), undefined, DialogModes.NO);  
    return A;               
}
b、 設(shè)為鏈接圖層中轉(zhuǎn)。(高效,高風(fēng)險(xiǎn))
getSelectedLayer: function(){  
    var selects = [app.activeDocument.activeLayer];  
    try {  
        var idlinkSelectedLayers = stringIDToTypeID( "linkSelectedLayers" );  
        var desc929 = new ActionDescriptor();  
        var idnull = charIDToTypeID( "null" );  
        var ref617 = new ActionReference();  
        var idLyr = charIDToTypeID( "Lyr " );  
        var idOrdn = charIDToTypeID( "Ordn" );  
        var idTrgt = charIDToTypeID( "Trgt" );  
        ref617.putEnumerated( idLyr, idOrdn, idTrgt );  
        desc929.putReference( idnull, ref617 );  
        executeAction( idlinkSelectedLayers, desc929, DialogModes.NO );  
    } catch(e) {}  
    if(selects[0].linkedLayers) selects = selects.concat(selects[0].linkedLayers);  
    return selects;  
},
 *注:以上代碼可能暫時(shí)不能看懂,沒(méi)關(guān)系,這些低層的數(shù)據(jù)訪問(wèn),實(shí)踐多了慢慢就懂了。
 
3、如何獲取文本圖層的顏色?
答:如果你用[ArtLayer].textItem.color,在實(shí)踐中很難正確獲取的文本顏色,因?yàn)樵O(shè)計(jì)師很可能是選擇文本填充顏色的,這個(gè)顏色值在range上。
參考方法:
charIDToTypeID("Txt ") - 圖層的文本數(shù)據(jù)
charIDToTypeID("Txtt") - 圖層文本range數(shù)據(jù)
具體可參考我的另一篇文章,PS腳本函數(shù)庫(kù)。
4、如何合并選中的圖層?
答:
錯(cuò)誤答案 - layer[ArtLayer].merge
 
正確答案 -
var idMrgtwo = charIDToTypeID( "Mrg2" );  
executeAction( idMrgtwo, undefined, DialogModes.NO );
 
*面板開(kāi)發(fā)(進(jìn)階)
如果我們開(kāi)發(fā)的插件是需要用戶不斷在文檔與插件之間進(jìn)行操作,對(duì)話框已經(jīng)不能滿足需求了,那么我們需要用到面板。
由于面板編程涉及adobe air,可以先作大致了解,非必須掌握的內(nèi)容。
如下圖:
具體操作方式如下:
1、使用flex/builder開(kāi)發(fā)flash面板,發(fā)布成extension-name.swf文件;
2、創(chuàng)建PS腳本 extension-name.jsx;
3、將extension-name.swf、extension-name.jsx放入Photoshop安裝目錄\Plug-ins\Panels\extension-name
原理:
Photoshop作為flash面板的宿主環(huán)境,flash與PS腳本通信執(zhí)行指令。
全面的介紹需要另起篇幅,不便于多作介紹,如有興趣,請(qǐng)點(diǎn)擊。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多