« 2012年5月 | メイン | 2012年12月 »

●Photoshopのレイヤー表示状態を操作するスクリプトあれこれ

2012年11月26日    

以前の記事のスクリプトを使ってくださって人から
全てのレイヤーを「表示」状態にするスクリプトをリクエスト頂いたので書いてみた

Show_all_layers.jsx
#target photoshop
//レイヤーセットを辿るための関数
function follw_LayerSets(parent){
	var ChildLyaers= parent.layers;
	for (var i = 0; i < ChildLyaers.length; i++){
		if (ChildLyaers[i].typename == "LayerSet"){
			//レイヤーセットの場合の処理
			//再帰処理
			follw_LayerSets(ChildLyaers[i]);
		}
		ChildLyaers[i].visible= true
	}
}
app.bringToFront();
//ドキュメントが開かれているかどうか判別
if (app.documents.length ==0){
	//ドキュメントが開かれていない場合処理なし
}else{
 	var parent = activeDocument;//作業するドキュメントの参照
	follw_LayerSets(parent);
}
前回のレイヤーセットの描画モードを変更するスクリプトの関数を作り直しただけですね

これだけではつまらないので
自分で作ろうと思っていて後回しにしていたものを書いてみた
選択中のレイヤーの上に重なってるレイヤーを全て「非表示」にするスクリプト

#target photoshop
//レイヤーセットを辿るための関数
function follw_LayerSets(parent,active_layer){
	var break_flag = 0;
	var ChildLyaers= parent.layers;
	for (var i = 0; i < ChildLyaers.length; i++){
		if (ChildLyaers[i] == active_layer){
			break_flag = 1;
			break;
			}
		if (ChildLyaers[i].typename == "LayerSet"){
			//レイヤーセットの場合の処理
			//回帰処理
			break_flag = follw_LayerSets(ChildLyaers[i],active_layer);
			if (break_flag == 1 ){break;}
			}
		ChildLyaers[i].visible= false;
	}
	return(break_flag);
}

app.bringToFront();
//ドキュメントが開かれているかどうか判別
if (app.documents.length ==0){
	//ドキュメントが開かれていない場合処理なし
}else{
 	var parent = activeDocument;//作業するドキュメントの参照
	var active_layer =activeDocument.activeLayer;
	follw_LayerSets(parent,active_layer);
}

と、このコードではレイヤーセット(グループ)の中にあるレイヤーも
有無を言わさず非表示状態にするおばかな仕様なので作り直し
選択中のレイヤの上にあるレイヤセットとレイヤを判別して
必要なレイヤーだけ非表示にするようにしたのがこれ

hide_upperLayers.jsx
#target photoshop
function hide_upperLayers(parent,level_list,active_layer){
	var break_flag = 0;
	var ChildLyaers= parent.layers;
	for (var i = 0; i < ChildLyaers.length; i++){
		if(ChildLyaers[i] == active_layer){
			//選択レイヤーで処理を終了
			break_flag = 1;
			break;
		}else if(ChildLyaers[i] == level_list[0]){
			//選択レイヤーの親だった場合下の階層を辿る
			level_list.shift()
			parent = ChildLyaers[i]
			break_flag = hide_upperLayers(parent,level_list,active_layer)
			if (break_flag == 1 ){break;}
		}else{ ChildLyaers[i].visible= false }
	}
	return (break_flag)
}
//レイヤセットの親まで辿るための関数
function get_level(child,level_list){
	var local_parent = child.parent;
	if (local_parent != activeDocument){
		//再帰処理
		level_list.unshift(local_parent);
		level_list = get_level(local_parent,level_list);
	}
	return(level_list)
}

app.bringToFront();
//ドキュメントが開かれているかどうか判別
if (app.documents.length ==0){
	//ドキュメントが開かれていない場合処理なし
}else{
 	var parent = activeDocument;//作業するドキュメントの参照
	 var active_layer = activeDocument.activeLayer
	 //現在のレイヤのレイヤーセットの階層を取得
	var level_list = new Array();
	level_list = get_level(active_layer,level_list);
	//上にあるレイヤを非表示に
	hide_upperLayers(parent,level_list,active_layer)
}

使う人が居るかどうか分からないけれどアーカーイブ

いつもの繰り返しになりますが
.jsまたは.jsxの拡張子でテキストファイルに保存して
ファイル>スクリプト>参照で このファイルを指定すると実行できます
スクリプトファイル指定の行程をアクションで記録するのもいいでしょう


●新着記事がある場合にここに表示するようにしてあります

2012年11月15日    

記事なし

●レイヤーセットの描画モードを一括変換

2012年11月 5日    

SaiやClip Studio Paint でPSDを書き出すと
レイヤーセット(グループ)の描画モードが「通常」になってしまうので
それを一括して「通過」にできるといいという声があったので作ってみました

//#target photoshop
//レイヤーセットを辿るための関数
function follw_LayerSets(parent){
	var ChildLyaers= parent.layers;
	for (var i = 0; i < ChildLyaers.length; i++){
		if (ChildLyaers[i].typename == "LayerSet"){
			//レイヤーセットの場合の処理
			set_PassThrough(ChildLyaers[i]);
			//再帰処理
			//arguments.callee(ChildLyaers[i])
			follw_LayerSets(ChildLyaers[i]);
		}else{
			//レイヤーセット以外に処理をしたい場合はここに記述
		}
	}
}
//描画モードが通常のレイヤーセットを通過に設定
function set_PassThrough(targetLayer){
	if (targetLayer.typename == "LayerSet"){
		if (targetLayer.allLocked == false){
			if (targetLayer.blendMode == BlendMode.NORMAL){
				targetLayer.blendMode = BlendMode.PASSTHROUGH;
			}
		}
	}
}
//main
// in case we double clicked the file
app.bringToFront();
//ドキュメントが開かれているかどうか判別
if (app.documents.length ==0){
	//ドキュメントが開かれていない場合処理なし
}else{
 	var parent = activeDocument;//作業するドキュメントの参照
	follw_LayerSets(parent);
}

通常モード以外のレイヤーセット(グループ)は影響を受けません
また「通常」のままにしたいレイヤーセット(グループ)がある場合はレイヤーをロックしておいてください。

.jsまたは.jsxの拡張子でテキストファイルに保存して
ファイル>スクリプト>参照で このファイルを指定すると実行できます
ファイル指定の行程をアクションで記録するのもいいでしょう

また、他の項目でも書いた通り、
Photoshopのプリセットスクリプトのフォルダに置くことで起動時にスクリプトメニューに読み込ませることもできます
プリセットスクリプトのフォルダは
MacOSXのCS5場合:/Applications/Adobe Photoshop CS5/Presets/Scripts
WindowsのCS5場合:Program Files¥Adobe¥Adobe Photoshop CS5¥Presets¥Scripts
になるかと思います