最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PS中執(zhí)行N遍選定動(dòng)作的腳本

  發(fā)布時(shí)間:2008-09-06 08:08:01   作者:佚名   我要評(píng)論
一個(gè)單步的動(dòng)作,用了這個(gè)腳本,就可以重復(fù)執(zhí)行100遍1000遍。上面就是一個(gè)路徑描邊100遍的效果,吼吼~ 不知道大家明白用處沒(méi)有?(以前老是困惑不停地去點(diǎn)動(dòng)作,點(diǎn)個(gè)幾十次來(lái)重復(fù)一個(gè)任務(wù)) 不容易啊。這次這個(gè)腳本前面的函數(shù)都是抄襲的,一些是抄ps自帶的腳本,還

一個(gè)單步的動(dòng)作,用了這個(gè)腳本,就可以重復(fù)執(zhí)行100遍1000遍。
上面就是一個(gè)路徑描邊100遍的效果,吼吼~ 不知道大家明白用處沒(méi)有?(以前老是困惑不停地去點(diǎn)動(dòng)作,點(diǎn)個(gè)幾十次來(lái)重復(fù)一個(gè)任務(wù))

不容易啊。這次這個(gè)腳本前面的函數(shù)都是抄襲的,一些是抄ps自帶的腳本,還有一個(gè)建立快照是這里的:http://www.ps-scripts.com/bb/vie ... ;highlight=snapshot 感謝老外。再次謝謝XYBLUEIDEA 斑竹和其他朋友的支持鼓勵(lì)!

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

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

操作結(jié)果
對(duì)選定的動(dòng)作,重復(fù)執(zhí)行指定次數(shù);(效果要靠動(dòng)作本身實(shí)現(xiàn))

用法
把解壓出來(lái)的 “執(zhí)行N遍動(dòng)作.jsx” 文件復(fù)制到 “ps安裝目錄\預(yù)置\腳本” 下,重新打開(kāi)ps以后就可以在~
[菜單- 文件-腳本] 里面找到 “執(zhí)行N遍動(dòng)作”
或者解壓出來(lái),在開(kāi)著ps的情況下,直接雙擊也可以用。

備注
執(zhí)行操作前可以先建立快照,如果對(duì)操作結(jié)果不滿意,可以通過(guò)快照返回。
(不過(guò)如果是多個(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í)行前");} //安全起見(jiàn),建立快照
        for(i=0;i<g;i++){
        doAction(ddAction.selection,ddSet.selection) //執(zhí)行選擇的動(dòng)作
        }
        this.parent.parent.close();
    }
}
win.center();
win.show();

 

相關(guān)文章

最新評(píng)論

武宁县| 凤凰县| 司法| 广州市| 泸州市| 基隆市| 兴义市| 黑龙江省| 怀仁县| 安陆市| 赤水市| 西乌珠穆沁旗| 丰县| 西宁市| 民勤县| 大石桥市| 黄石市| 玛纳斯县| 嘉祥县| 平塘县| 廉江市| 东丰县| 乌什县| 河北区| 嘉禾县| 珲春市| 萨迦县| 峡江县| 黄大仙区| 宜良县| 弋阳县| 伽师县| 绥棱县| 凤山县| 汶上县| 西林县| 西青区| 湖州市| 濮阳县| 峨眉山市| 靖州|