PS中執(zhí)行N遍選定動(dòng)作的腳本(2)_PhotoShop基礎(chǔ)教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      貼出代碼,方便指正優(yōu)化

      操作對象
      任何錄制好的動(dòng)作;

      操作結(jié)果
      對選定的動(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í)行操作前可以先建立快照,假如對操作結(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:
      // Return:
      /////////////////////////////////////////////////////////////////////
      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:
      // 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:
      // 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 doAction(ddAction.selection,ddSet.selection) //執(zhí)行選擇的動(dòng)作
      }
      this.parent.parent.close();
      }
      }
      win.center();
      win.show();


      Photoshop在線視頻教程  Photoshop視頻教程下載

      共2頁上一頁12下一頁
      來源:藍(lán)色理想//所屬分類:PhotoShop基礎(chǔ)教程/更新時(shí)間:2008-02-26
      相關(guān)PhotoShop基礎(chǔ)教程