PS動作、腳本實際工作中的應用
上面是10層不同位置的矩形,最底層是一個智能對象(包含兩個圖層,上面一層為修改后的,下面一層為原圖)
文件格式ok,接下來就是腳本大顯身手的地方了。
接下來我們開始編寫腳本,為了通俗,這一步主要只是談談思路
首先測試單個文件,腳本大致需要執(zhí)行如下步驟:
-
移動到最底層
向上移動一層,利用 activeLayer.bounds 記錄層范圍坐標,并把坐標記錄下來
反復執(zhí)行第2步,直到最頂層
輸出記錄
然后就是批量處理了 ,該腳本已經有完善的批量打開、保存處理模塊。局部Copy后稍加修改,就讓我們的腳本實現(xiàn)了如下功能:
-
用戶選擇待處理文件夾
獲取該文件夾下所有文件
打開一個文件,獲取并記錄所有需要的坐標,關閉不保存
重復第3步,直至處理完所有文件
輸出記錄
并對單個文件內的操作作了修改:
-
移動到最底層
打開最底層智能對象
另存智能對象為jpg文檔(xxx_1)
隱藏智能對象里的最上層,也就是我們修改過的那層
再次另存智能對象為jpg文檔(xxx_0)
不保存關閉智能對象(回到原文檔)
向上移動一層,利用 activeLayer.bounds 記錄層范圍坐標,并把坐標記錄下來
反復執(zhí)行第7步,直到最頂層
后來,由于第二張圖片和第一張圖片很多相同的地方,導致游戲文件體積較大,所以想了一個解決辦法,就是把相同的部分用黑色擋住,只保留不同的地方,這樣jpg就小很多。也許是個笨辦法吧,畢竟不太清楚別人怎么做的,這里只是給大家說說思路罷了。
于是再次修改單個文件內的操作部分
-
移動到最底層
向上移動一層,利用activeLayer.bounds 記錄層范圍坐標,并把坐標記錄下來
反復執(zhí)行第2步,直到最頂層
再次回到最底層
打開最底層智能對象
利用記錄的坐標,建立選區(qū)(增加模式),全部選區(qū)增添完后,反選
填充黑色(這時候是填充在智能對象內部最上層上,也就是我們修改過的那層)
另存為智能對象為jpg文檔(xxx_1)
隱藏當前圖層
再次另存智能對象為jpg文檔(xxx_0)
不保存關閉智能對象(回到原文檔)
為了程序調用方便,腳本還順便實現(xiàn)其他一些功能:
比如把文件名作些規(guī)范處理:按照數(shù)字大小排序文件(否則打開順序會是1、11、12、2、21這樣),并且把1.psd 、2.psd 之類的記錄為 0001、0002;
用簡單正則替換去掉坐標記錄轉換為字符串后的“ px”單位等等。
為了處理時對進度有個掌握,腳本界面上還放了進度條。
最后,發(fā)現(xiàn)有時候不需要重新生成圖像,只需要獲取坐標。又在界面上加了一個 “僅查詢坐標,不生成圖片”的選項。如果勾選,就會跳過保存的步驟,以節(jié)省時間。
以上的過程,最終就是如下這個腳本程序,處理我近百張圖片也就3分多的樣子,手工的話又容易出錯又慢,程序的優(yōu)勢就這樣體現(xiàn)出來了。

以后要修改、調整,只要修改psd文檔,再用腳本重新生成 就很快完成工作。兩個多小時的編寫調試還是值得的 。
#target photoshop
app.bringToFront();
res ="dialog { \
text:'找茬數(shù)據(jù)專用',\
group: Group{orientation: 'column',alignChildren:'left',\
folderO:Group{ orientation: 'row', \
b: Button {text:'待處理文件夾', properties:{name:'open'} ,helpTip:'選擇您需要處理的文件所在的文件夾'},\
s: EditText { text:'', preferredSize: [360, 20] },\
},\
folderS:Group{ orientation: 'row', \
b: Button {text:'輸出圖像至', properties:{name:'save'} ,helpTip:'選擇您處理好的文件要保存至的文件夾'},\
s: EditText { text:'', preferredSize: [360, 20] },\
},\
meng:Group{ orientation: 'row', \
c:Checkbox { text:' 啟用黑色蒙版'} ,\
s: StaticText { text:'| 蒙版收縮量(單位px):' }, \
e: EditText { text:'2', preferredSize: [20, 18]},\
},\
Quality: Group { orientation: 'row', \
c:Checkbox { text:' 僅查詢坐標,不生成圖片'} ,\
s: StaticText { text:'| 生成JPG的壓縮質量:' }, \
d: DropDownList { alignment:'left', itemSize: [26,14] },\
}, \
gg: Group{orientation: 'column',alignChildren:'left' },\
timeline:Progressbar{bounds:[0,0,400,10] , minvalue:0,maxvalue:100}\
aa: Button { text:'START'}, \
}\
}";
var mengPoint="";
var mengColor =new SolidColor;
mengColor.rgb.red =0;
mengColor.rgb.green =0;
mengColor.rgb.blue =0;
win = new Window (res);
win.myText = win.group.gg.add("edittext",[0,0,500,300],'~~~',{multiline:true, readonly:false});
for (i=0;i<13;i ){ //初始化jpeg質量下拉
win.group.Quality.d.add("item", i );
}
win.group.Quality.d.items[7].selected=true;
function lyFoot() { // 選中最下層
var id553 = charIDToTypeID( "slct" );
var desc88 = new ActionDescriptor();
var id554 = charIDToTypeID( "null" );
var ref95 = new ActionReference();
var id555 = charIDToTypeID( "Lyr " );
var id556 = charIDToTypeID( "Ordn" );
var id557 = charIDToTypeID( "Back" );
ref95.putEnumerated( id555, id556, id557 );
desc88.putReference( id554, ref95 );
var id558 = charIDToTypeID( "MkVs" );
desc88.putBoolean( id558, false );
executeAction( id553, desc88, DialogModes.NO );
}
function lyUp(){ //選中上一層
var id559 = charIDToTypeID( "slct" );
var desc89 = new ActionDescriptor();
var id560 = charIDToTypeID( "null" );
var ref96 = new ActionReference();
var id561 = charIDToTypeID( "Lyr " );
var id562 = charIDToTypeID( "Ordn" );
var id563 = charIDToTypeID( "Frwr" );
ref96.putEnumerated( id561, id562, id563 );
desc89.putReference( id560, ref96 );
var id564 = charIDToTypeID( "MkVs" );
desc89.putBoolean( id564, false );
executeAction( id559, desc89, DialogModes.NO );
}
function openSm() { //打開智能對象
var id216 = stringIDToTypeID( "placedLayerEditContents" );
var desc43 = new ActionDescriptor();
executeAction( id216, desc43, DialogModes.NO );
}
function lyHidden(){ //隱藏當前圖層
var id217 = charIDToTypeID( "Hd " );
var desc44 = new ActionDescriptor();
var id218 = charIDToTypeID( "null" );
var list1 = new ActionList();
var ref24 = new ActionReference();
var id219 = charIDToTypeID( "Lyr " );
var id220 = charIDToTypeID( "Ordn" );
var id221 = charIDToTypeID( "Trgt" );
ref24.putEnumerated( id219, id220, id221 );
list1.putReference( ref24 );
desc44.putList( id218, list1 );
executeAction( id217, desc44, DialogModes.NO );
}
function sm(name) { //保存結果圖像
lyFoot();
openSm();
var smDoc=app.activeDocument;
if (win.group.meng.c.value) meng(smDoc);
var saveFolder = win.group.folderS.s.text "/";
saveOptions = new JPEGSaveOptions();
saveOptions.quality =win.group.Quality.d.selection.index;; //獲取jpg壓縮質量
smDoc.saveAs(new File(saveFolder name "_1.jpg"),saveOptions, true,Extension.LOWERCASE);
lyHidden();
smDoc.saveAs(new File(saveFolder name "_0.jpg"),saveOptions, true,Extension.LOWERCASE);
smDoc.close(SaveOptions.DONOTSAVECHANGES);
}
function selectBounds(name,a,b,c,d) { //做選區(qū)
app.activeDocument.selection.select([[a, b],[ a, d ], [c, d], [ c, b]],SelectionType.EXTEND);
}
function meng(smDoc) { //添加蒙版
nowPoint=mengPoint.split(",");
for (var i=0;i<nowPoint.length-4;i =4){
selectBounds(smDoc,nowPoint[i],nowPoint[i 1],nowPoint[i 2],nowPoint[i 3],)
}
// ==================================擴展n像素
var id32 = charIDToTypeID( "Expn" );
var desc5 = new ActionDescriptor();
var id33 = charIDToTypeID( "By " );
var id34 = charIDToTypeID( "#Pxl" );
desc5.putUnitDouble( id33, id34, Number(win.group.meng.e.text) );
executeAction( id32, desc5, DialogModes.NO );
// ==================================反選
var id35 = charIDToTypeID( "Invs" );
executeAction( id35, undefined, DialogModes.NO );
//
smDoc.selection.fill(mengColor); //填充蒙版色
}
// 打開文件夾的操作
var folderOpen=win.group.folderO
var folderSave=win.group.folderS
folderOpen.b.onClick = function() {
var defaultFolder = folderOpen.s.text;
var testFolder = new Folder(defaultFolder);
if (!testFolder.exists) {
defaultFolder = "~";
}
var selFolder = Folder.selectDialog("選擇待處理文件夾", defaultFolder);
if ( selFolder != null ) {
folderOpen.s.text = selFolder.fsName;
folderOpen.s.helpTip = selFolder.fsName.toString();
}
}
folderSave.b.onClick = function() {
var defaultFolder = folderSave.s.text;
var testFolder = new Folder(defaultFolder);
if (!testFolder.exists) {
defaultFolder = "~";
}
var selFolder = Folder.selectDialog("選擇要儲存至的文件夾", defaultFolder);
if ( selFolder != null ) {
folderSave.s.text = selFolder.fsName;
folderSave.s.helpTip = selFolder.fsName.toString();
}
}
win.group.aa.onClick=function(){
var myText="";
var openFolder = Folder(win.group.folderO.s.text);
var fileList = openFolder.getFiles() //獲取open文件夾下所有文件
win.group.timeline.value =0;
var k=100/fileList.length;
//調整文件順序,按數(shù)字大小排序
fileList.sort(function compare(a,b){return Number(a.name.substring(0, a.name.length-4))-Number(b.name.substring(0, b.name.length-4));})
//
for (i=0;i<fileList.length;i ){
if (fileList[i] instanceof File && fileList[i].hidden == false){ //不處理隱藏文件
var docRef =open(fileList[i]);
var nowName =docRef.name.substring(0, docRef.name.length-4);
while (nowName.length<4) {
nowName ="0" nowName;
}
myText =nowName ",";
mengPoint="";
lyFoot();
for (j=1;j<docRef.layers.length;j ){
lyUp();
myText =docRef.activeLayer.bounds ",";
mengPoint =docRef.activeLayer.bounds ",";
}
if (!win.group.Quality.c.value) sm(nowName);
docRef.close(SaveOptions.DONOTSAVECHANGES);
myText ="\r\n";
}
win.group.timeline.value =win.group.timeline.value k;
}
var re = / px/g; //要替換的“ px”
win.myText.text=myText.replace(re, "");
}
//////////////
win.center();
win.show();
相關文章
今天我們繼續(xù)來介紹ps基礎教程,這篇我們主要講橡皮擦工具組和填充工具組,這兩個工具在修圖的時候是比較常用的,下面我們就來看看基礎教程2025-05-01
ps圖層是什么?簡單來說,ps軟件中的圖層就好比是一張“透明紙”,將圖像的各個部分繪制在不同的“透明紙”上,可以看到紙后的東西,而且每層紙都是獨立的,下面我們就來看2025-04-25
ps零基礎之圖層樣式的講解,在使用ps的時候,我們經常會在圖層上添加一些效果,這就是圖層樣式,該怎么應用呢?詳細請看下文介紹2024-12-23
ps如何把一張長圖切成幾張小圖片? ps把長圖切成短圖的技巧
有時候,我們希望能把一張圖片均勻地分成幾張圖片,就像拼圖一般的效果,需要某一部分隨時可以拿出來使用,該怎么操作呢?詳細請看下文介紹2024-09-10
PS調整字體大小是一個非?;A的操作,但也是非常實用的技能,在Photoshop中,調整字體大小的方式有多種,詳細請看下文介紹2024-02-02
但最近有用戶在使用photoshop時發(fā)現(xiàn)窗口界面的字體比較小,使用起來非常的不方便,因此有不少用戶想將其大小進行調節(jié),具體該如何操作呢?詳細請看下文介紹2024-02-02
ps中圖層被父圖層鎖定怎么辦? 圖層被父圖層鎖定的解鎖技巧ps
ps中圖層被父圖層鎖定怎么辦?ps中圖層解鎖失敗,提示圖層被父圖層鎖定該怎么辦呢?下面我們就來看看詳細的解決辦法2023-12-19
ps描邊最大只有288怎么辦? Photoshop描邊只能調到288像素的解決辦法
ps描邊最大只有288怎么辦?ps描邊在使用的過程中,發(fā)現(xiàn)只能調到288像素,該怎么操作呢?下面我們就來看看Photoshop描邊只能調到288像素的解決辦法2023-11-30
PS工具欄中的工具有缺失怎么辦? Photoshop工具欄不全的多種解決辦法
PS工具欄中的工具有缺失怎么辦?ps工具欄中有很多工具,但是發(fā)現(xiàn)有些工具不見了,該怎么辦呢?下面我們就來看看Photoshop工具欄不全的多種解決辦法2023-11-30
Photoshop2024怎么下載安裝? ps2024安裝圖文教程
Photoshop2024怎么下載安裝?ps2024發(fā)布以后,很多朋友想要嘗試信工鞥,該怎么下載安裝呢?下面我們就來看看ps2024安裝圖文教程2023-11-30




