貼出代碼,方便指正優(yōu)化
操作對(duì)象: 任何錄制好的動(dòng)作;
操作結(jié)果: 對(duì)選定的動(dòng)作,重復(fù)執(zhí)行指定次數(shù);(效果要靠動(dòng)作本身實(shí)現(xiàn))
用法: 把解壓出來的 “執(zhí)行N遍動(dòng)作.jsx” 文件復(fù)制到 “ps安裝目錄\預(yù)置\腳本” 下,重新打開ps以后就可以在~ [菜單- 文件-腳本] 里面找到 “執(zhí)行N遍動(dòng)作” 或者解壓出來,在開著ps的情況下,直接雙擊也可以用。
備注: 執(zhí)行操作前可以先建立快照,如果對(duì)操作結(jié)果不滿意,可以通過快照返回。 (不過如果是多個(gè)文件、保存關(guān)閉之類的操作就別選了,恐怕會(huì)出錯(cuò) )
#target photoshop app.bringToFront(); // 重復(fù)執(zhí)行N遍選中的動(dòng)作 ///////////////////////////////////////////////////////////////////// // Function: GlobalVariables // Usage: global action items that are reused // Input: <none> // Return: <none> ///////////////////////////////////////////////////////////////////// function GlobalVariables() { gClassActionSet = charIDToTypeID( 'ASet' ); gClassAction = charIDToTypeID( 'Actn' ); gKeyName = charIDToTypeID( 'Nm ' ); gKeyNumberOfChildren = charIDToTypeID( 'NmbC' ); } ///////////////////////////////////////////////////////////////////// // Function: GetActionSetInfo // Usage: walk all the items in the action palette and record the action set // names and all the action children // Input: <none> // Return: the array of all the ActionData // Note: This will throw an error during a normal execution. There is a bug // in Photoshop that makes it impossible to get an acurate count of the number // of action sets. ///////////////////////////////////////////////////////////////////// function GetActionSetInfo() { var actionSetInfo = new Array(); var setCounter = 1; while ( true ) { var ref = new ActionReference(); ref.putIndex( gClassActionSet, setCounter ); var desc = undefined; try { desc = executeActionGet( ref ); } catch( e ) { break; } var actionData = new ActionData(); if ( desc.hasKey( gKeyName ) ) { actionData.name = desc.getString( gKeyName ); } var numberChildren = 0; if ( desc.hasKey( gKeyNumberOfChildren ) ) { numberChildren = desc.getInteger( gKeyNumberOfChildren ); } if ( numberChildren ) { actionData.children = GetActionInfo( setCounter, numberChildren ); actionSetInfo.push( actionData ); } setCounter++; } return actionSetInfo; } ///////////////////////////////////////////////////////////////////// // Function: GetActionInfo // Usage: used when walking through all the actions in the action set // Input: action set index, number of actions in this action set // Return: true or false, true if file or folder is to be displayed ///////////////////////////////////////////////////////////////////// function GetActionInfo( setIndex, numChildren ) { var actionInfo = new Array(); for ( var i = 1; i <= numChildren; i++ ) { var ref = new ActionReference(); ref.putIndex( gClassAction, i ); ref.putIndex( gClassActionSet, setIndex ); var desc = undefined; desc = executeActionGet( ref ); var actionData = new ActionData(); if ( desc.hasKey( gKeyName ) ) { actionData.name = desc.getString( gKeyName ); } var numberChildren = 0; if ( desc.hasKey( gKeyNumberOfChildren ) ) { numberChildren = desc.getInteger( gKeyNumberOfChildren ); } actionInfo.push( actionData ); } return actionInfo; } ///////////////////////////////////////////////////////////////////// // Function: ActionData // Usage: this could be an action set or an action // Input: <none> // Return: a new Object of ActionData ///////////////////////////////////////////////////////////////////// function ActionData() { this.name = ""; this.children = undefined; this.toString = function () { var strTemp = this.name; if ( undefined != this.children ) { for ( var i = 0; i < this.children.length; i++ ) { strTemp += " " + this.children[i].toString(); } } return strTemp; } } ////////// function CreateSnapshot(name) { function cTID(s) { return app.charIDToTypeID(s); }; var desc = new ActionDescriptor(); var ref = new ActionReference(); ref.putClass( cTID('SnpS') ); desc.putReference( cTID('null'), ref ); var ref1 = new ActionReference(); ref1.putProperty( cTID('HstS'), cTID('CrnH') ); desc.putReference( cTID('From'), ref1 ); desc.putString( cTID('Nm '), name); desc.putEnumerated( cTID('Usng'), cTID('HstS'), cTID('FllD') ); executeAction( cTID('Mk '), desc, DialogModes.NO ); } ////////// res ="dialog { \ text:'重復(fù)執(zhí)行選定動(dòng)作',\ group: Group{orientation: 'column',alignChildren:'left',\ corrdination: Panel { orientation: 'row', \ text: '選擇動(dòng)作', \ cla: Group { orientation: 'row', \ d: DropDownList { alignment:'left' },\ }\ act: Group { orientation: 'row', \ d: DropDownList { alignment:'left' },\ }\ }, \ num: Group { orientation: 'row', \ s: StaticText { text:'執(zhí)行次數(shù):' }, \ e: EditText { preferredSize: [50, 20] } ,\ }, \ Snapshot:Group{ orientation: 'row', \ c: Checkbox { preferredSize: [16, 16]} ,\ s: StaticText {text:'建立快照(根據(jù)動(dòng)作內(nèi)容適當(dāng)選擇)'},\ }, \ },\ buttons: Group { orientation: 'row', alignment: 'right',\ Btnok: Button { text:'確定', properties:{name:'ok'} }, \ Btncancel: Button { text:'取消', properties:{name:'cancel'} } \ } \ }"; win = new Window (res); GlobalVariables(); var actionInfo = GetActionSetInfo(); var ddSet=win.group.corrdination.cla.d; var ddAction=win.group.corrdination.act.d; if ( actionInfo.length > 0 ) { for ( var i = 0; i < actionInfo.length; i++ ) { ddSet.add( "item", actionInfo[i].name ); } ddSet.items[0].selected = true; ddSet.onChange = function() { ddAction.removeAll(); for ( var i = 0; i < actionInfo[ this.selection.index ].children.length; i++ ) { ddAction.add( "item", actionInfo[ this.selection.index ].children[ i ].name ); } if ( ddAction.items.length > 0 ) { ddAction.items[0].selected = true; } ddSet.helpTip = ddSet.items[ ddSet.selection.index ].toString(); } ddSet.onChange(); } else { ddSet.enabled = false; ddAction.enabled = false; } ddAction.onChange = function() { ddAction.helpTip = ddAction.items[ ddAction.selection.index ].toString(); } win.buttons.Btncancel.onClick = function () { this.parent.parent.close(); } win.buttons.Btnok.onClick = function () { g=Number(win.group.num.e.text); if(g<1){ alert ('-_-!!! 至少得運(yùn)行一次吧?') win.group.num.e.text='1'; g=1 }else { var b=win.group.Snapshot.c.value; if(b && app.documents.length) {CreateSnapshot(g+"遍動(dòng)作執(zhí)行前");} //安全起見,建立快照 for(i=0;i<g;i++){ doAction(ddAction.selection,ddSet.selection) //執(zhí)行選擇的動(dòng)作 } this.parent.parent.close(); } } win.center(); win.show();
經(jīng)典論壇討論: http://bbs.blueidea.com/thread-2831890-1-1.html
本文鏈接:http://www.95time.cn/tech/graph/2008/5321.asp
出處:藍(lán)色理想
責(zé)任編輯:moby
上一頁 PS中執(zhí)行N遍選定動(dòng)作的腳本 [1] 下一頁
◎進(jìn)入論壇Photoshop、Fireworks版塊參加討論,我還想發(fā)表評(píng)論。
|