新規作成 | 一覧 | RSS | FrontPage | 検索 | 更新履歴
== o ==
ねこまたや web出張所
INDEX

トップページ
お知らせ
twitter
お道具箱
技術資料と雑談
ライブラリ
雑貨や(ダウンロード)
最近の更新
ねこまたやについて

twitter

ねこまたやのついった

企画モノ

psAxe情報ページ
自主制作アニメ
ぽこあぽこ られんたんど


あやかしあやし
エフェクトネタ帳



りまぴん
AE エクスプレッション
レンダー乙女とか
簡易版XPSリンカ
おまけギャラリ

BBS

ねこまたやBBS
開発室BBS

Language



開発室みたいなものでしたが
spamアクセスがはげしいのでページは凍結中です。
書き換えは管理人のみが可能です。
Nekomataya/2024

applyFilterPBK - スクリプトからピクセルベンダーを実行するヨ


差分表示


スクリプトからピクセルベンダーを実行するヨ

[[PS_Script]]

----

PhotoshopがCS6になって、ビデオまわりの性能が良くなりました。

CS5よりもプレビューとか軽いのでアニメのお仕事につかってます。

CS6から CS4-CS5と利用していた PixelBender のフィルタがサポート対象外になってしまったのでがっかり状態だったのですが、どうもスクリプトから実行すると条件付きですが、以前のフィルタが実行できるようなので、そのコードの紹介です。


ご利用になる方はテケトーにご自分の環境に書き換えてご利用下さい。

正式にサポートされていない「裏ワザ」状態なので、このスクリプトでなんちゃらかんちゃらな結果が起きることもあります。

各自ご自分の責任でどうぞ

----
以下そーす
----
---(
/*
	Photoshopスクリプト
	スクリプトからpixel benderフィルタを実行するスクリプトテンプレート
	2012.08.20
 */

// スクリプトをダブルクリックで実行するためのおまじない。不要なら削除してね
#target photoshop
// 実行時にPotoshopを最前面にする。上の擬似命令を削除した場合はこの下も多分不要
app.bringToFront();
//ドキュメントがなかったりレイヤが選択されていなかったら実行しない
  if((app.documents.length)&&(app.activeDocument)&&(app.activeDocument.activeLayer)){

/*
	アプリケーションフォルダ内の "Pixel Bender Files" フォルダの有無をチェックして
	Pixel Bender が使用可能なPhotoshopか否か判定する
	CS4-5で有効
	裏技としてCS6でpixel Benderフィルタを使用する場合は、
		下のexPBKフラグをtrueに固定する
		又は手作業で上記のフォルダ(カラでOK)を作成しといて下さい。
*/
var exPBK = new Folder(app.path.fullName+"/Pixel Bender Files").exists;

//exPBK = true;//強制的に実行する
//exPBK = false;//実行しない
if(exPBK)
{
// =======================================================PixelBenderフィルタ(pbk)
/*	applyPbk(myPBK,knlName,[[control,value]],dialog)
引数
	myPBK	フィルタファイルへのパス(文字列)
	knlName	カーネル名(カーネルの記述と一致している必要がある)
	control	コントロール記述(文字列)[省略するとデフォルトの値で実行される]
	value	コントロールの値(数値)[省略するとデフォルトの値で実行される]
	dialog	ダイアログモード(文字列 "ALL""ERROR""NO")[省略可]
戻り値
	特になし(undefeined)
	pixel bender karnel をスクリプトから適用する関数
	引数myPBKはカーネルファイル又はファイルパスで
	存在しないカーネルファイルが指定された場合は、動作をスキップ

この関数にピクセルベンダーフィルタの位置を与えて実行します。
CS4-5のピクセルベンダーギャラリー経由でフィルタを実行すると、
決まったフォルダの中のフィルタしか実行できませんが、スクリプトから実行する場合はどこにあっても
良いようです。

ダイアログの呼び出しは、CS6では基本的に無効です。
CS6でフィルタを実行する場合は、dialogModes.NOで呼び出して下さい。

実行例
(パラメータ指定)

applyPbk(nasLibFolderPath+"PixelBenderKernel/traceY.pbk","trace_Y",[["hueOffset",0.],["hueRange",0.3],["strThreshold",20.0],["backgroundClip",100.0],["lineIntensity",0.]],"ALL");
applyPbk(
nasLibFolderPath+"PixelBenderKernel/traceY.pbk",
"trace_Y",
[
 ["hueOffset",0.],["hueRange",0.3],
 ["strThreshold",20.0],["backgroundClip",100.0],
 ["lineIntensity",0.]
],
"ALL"
);

applyPbk(nasLibFolderPath+"PixelBenderKernel/traceK.pbk",
"traceK",
[
["saturation",2.500000],
["backgroundClip",100.000000],
["lineIntensity",20.000000]
],
"NO"
);

パラメータを指定しない場合はカラの配列を指定しておいて下さい。

applyPbk(nasLibFolderPath+"PixelBenderKernel/thin000.pbk","thin000",[],"NO");
applyPbk(nasLibFolderPath+"PixelBenderKernel/thin000.pbk","thin000",[],"NO");
applyPbk(nasLibFolderPath+"PixelBenderKernel/traceAll.pbk","traceAll",[],"NO");
applyPbk(nasLibFolderPath+"PixelBenderKernel/traceK.pbk","traceK",[],"ALL");

*/
applyPbk=function(myPBK,knlName,fVA,dMode){
 if(! dMode){dMode="NO"}
 if(! dMode.match(/(ALL|ERROR)/)){dMode="NO";};
 if(! fVA){fVA=[];}
 if(! knlName ) knlName=false;
 if(!(myPBK instanceof(File))){myPBK=new File(myPBK);};//ファイルオブジェクトでなければ新規ファイル

	if((myPBK.exists)&&(knlName)){
// =======================================================pbk適用(パラメタあり)
var idPbPl = charIDToTypeID( "PbPl" );//pbk識別文字列
    var descPbk = new ActionDescriptor();//アクションディスクリプタを作る

    var idKnNm = charIDToTypeID( "KnNm" );//KarNel NaMe
    descPbk.putString( idKnNm, knlName );//カーネル識別名設定(たぶんUndoの識別名のみ)

    var idGpuY = charIDToTypeID( "GpuY" );//GPU使用フラグ(現在使用側に固定 判定して調整は多分必要 引数制御か?)
    descPbk.putBoolean( idGpuY, true );//同設定

    var idLIWy = charIDToTypeID( "LIWy" );//不明な識別子
    descPbk.putBoolean( idLIWy, true );//同設定 - これは決め打ちで残す

    var idFPth = charIDToTypeID( "FPth" );//ファイルパス識別子
    descPbk.putString( idFPth, myPBK.fsName );//ファイルパス設定
//パラメタがある数だけ繰り返して設定 現在パラメタの種別はFloatのみで決め打ち(汎用性なし)
//idは自動生成 アルファベット1巡で打ち止め
//aa,ab,ac,ad,ae~と連続
 var exText=new Array();
 for(var ix=0;ix< fVA.length;ix++){
   var myChar="abcdefghijklmnopqrstuvwxyz".charAt(ix);
   var idPN = charIDToTypeID( "PNa"+myChar );//パラメタ名+id
   descPbk.putString( idPN, fVA[ix][0] );//パラメタ名設定
   var idPT = charIDToTypeID( "PTa"+myChar );//パラメタに関する何かの識別子+id
   descPbk.putInteger( idPT, 0 );//整数で0を設定している とりあえずコピー
   var idPF = charIDToTypeID( "PFa"+myChar );//実際にかけたいパラメタの識別子
   descPbk.putDouble( idPF, fVA[ix][1] );//適用パラメタ
 }
 executeAction( idPbPl, descPbk, DialogModes[dMode] );
	}
}
// =======================================================
//pixelBender カーネルの位置を指定して実行
/*
	CS4-5ではダイアログを使用することが可能、その場合はピクセルベンダーギャラリのダイアログが出てくる
	CS6でダイアログを呼ぶと油彩ペイントのダイアログが出現して、油彩エフェクトが適用されます。
	CS6で油彩エフェクト以外のフィルタをつかう場合は、必ず"dialogModes.NO"で
*/
applyPbk(app.path.fullName+"/Pixel Bender Files/hole.pbk","Hole",[],"NO");

}
  }
---)

----
個人で使っているものなので、パラメータは浮動少数で決め打ちです。

ま、ご参考までに