2013年6月1日土曜日

PhotoshopScript : SwitchLayers v01 レイヤーの表示切り替え

相変わらず忙しいので、いつもながらチラ裏です スミマセン
いつかまともなサイトを作りたい物です・・・


今回もPhotoshopのスクリプトです


Photoshopで画像の差分制作を行います

エロではありません。
いや、むしろエロでつかったら俺にください!!!


・・・というわけで、差分のレイヤー表示を簡単に
するべく作ったスクリプトです


説明


命名法則により、表示、非表示を
一括で切り替えるスクリプトです

■Unhide
名前がマッチした場合、表示する

■Hide Group
名前がマッチした場合、非表示にする
※表示に入っている場合は無視されます

■その他
・その他のレイヤーの表示は変更しません
・レイヤーセットの名前が適合した場合、
 それ以下のレイヤーの表示は変更しません


SwitchLayers


//SwitchLayers
// 05 28 2013

//Global
var LEFT = 20
var TOP  = 20
var BUTTON_W = 100
var OFFSET_W = 125
var BUTTON_H = 25
var OFFSET_H = 40

//初期に設定されるグループネーム
var textChkGroupName = "p1,p2,p3,p4,p5,p6,p7,p8,p9";
var gUnHideObjectName = "homhom"
var gHideObjectNameGroup = ["hamham"]


//レイヤーに対するアクションA
function layerActionA( in_Layer ){
    //alert( "ActionA Match " + in_Layer.name )
    in_Layer.visible = true
    }


//レイヤーに対するアクションB
function layerActionB( in_Layer ){
    //alert( "ActionB GMatch " + in_Layer.name )    
    in_Layer.visible = false
    }


//名前検索(グループ)
function chkNameGroup( trget_Name )
{
    for ( var i = 0; i < gHideObjectNameGroup.length; i++)
    {
        if (trget_Name.match( gHideObjectNameGroup[i] ) ){
            return true
            }
        }
    return false
    }


//名前検索
function chkName( trget_Name ){
    //alert(gUnHideObjectName)
    if ( trget_Name.match( gUnHideObjectName ) ){
        return true
        }
    return false
    }


//再帰関数
function getAllLayer(parent){
    //alert(gUnHideObjectName)
 var ChildLayers= parent.layers;
 for (var i = 0; i < ChildLayers.length; i++){
  if (ChildLayers[i].typename == "LayerSet"){
   //レイヤーセットの場合の処理            
             //alert("LayerSet Name = " + ChildLayers[i].name)
             if( chkName( ChildLayers[i].name ) ){
                layerActionA( ChildLayers[i] )
                continue;
                }
                else{
                    //該当する名前がグループのみにあった場合
                    if ( chkNameGroup( ChildLayers[i].name) ){
                        layerActionB( ChildLayers[i] )
                        continue;
                        }
                    }
   //再帰処理
   getAllLayer(ChildLayers[i]);
  }else{
            //通常のレイヤーの場合の処理
           // alert("Layer    Name = " + ChildLayers[i].name)
            if( chkName( ChildLayers[i].name ) ){
                layerActionA( ChildLayers[i] )
                }else{
                    //該当する名前がグループのみにあった場合
                    if ( chkNameGroup( ChildLayers[i].name) ){
                        layerActionB( ChildLayers[i] )
                        }
                }
            }
 }
}


function switchLayers(uDlg){
    //alert("changeViewVis")
    
    //ダイアログからグローバル変数の設定
    gUnHideObjectName = uDlg.unhideName.text
    gHideObjectNameGroup =  uDlg.hideGroupName.text.split(",")
    
    //alert(gUnHideObjectName)
    //for ( var i = 0; i < gHideObjectNameGroup.length;i++)
    //    alert(gHideObjectNameGroup[i])
    
    
    //実作業
    var parent = activeDocument;//作業するドキュメントの参照
    getAllLayer(parent);
    
    
    refresh();
    }



function main(){
 
    app.bringToFront();
    //ドキュメントが開かれているかどうか判別
    if (app.documents.length ==0){
        alert("No Docment")
        return;
        //ドキュメントが開かれていない場合処理なし
    }
    var uDlg = new Window('dialog','switchLayers');
    uDlg.bounds = [200,300,580,420];   
    //uDlg.opacity = .9;

    
    uDlg.sText = uDlg.add("statictext",      [ 20, 10, 140, 10 + BUTTON_H], "UnHide (Unique)");
    uDlg.unhideName = uDlg.add("edittext",   [150, 10, 250, 10 + BUTTON_H], "p1");
    
    uDlg.sText = uDlg.add("statictext",      [ 20, 40, 140, 40 + BUTTON_H], "HideGroup(split(','))");
    uDlg.hideGroupName = uDlg.add("edittext",[150, 40, 360, 40 + BUTTON_H], textChkGroupName);
    
    uDlg.btnCancel = uDlg.add("button",      [150, 70, 250, 70 + BUTTON_H], "Close");
    uDlg.btn00 = uDlg.add("button",          [270, 70, 360, 70 + BUTTON_H], "Apply");

    uDlg.btnCancel.onClick = function () {
        //alert("キャンセルされました。");
        uDlg.close();
    }


    //ボタンを押されたときの設定
    uDlg.btn00.onClick = function ()
    {
        //switchLayers(uDlg);
        activeDocument.suspendHistory('switchLayers', 'switchLayers(uDlg)'); //margin(gap);
    }

    uDlg.show()
    
    //alert("finish")
    }

main()


展望


現在、表示レイヤーをtga保存する
ところまでいけました
次は一括出力です。
この手の作業はなるべく自動化しておきたい物ですヨ

0 件のコメント:

コメントを投稿