photoshop:減色処理をバッチとjavascriptで実現。

【今回の課題】
256色の画像を指定の16色グレースケールカラーテーブルで減色。
但し、透過色指定があるものは17色目としてカラーテーブルに残す。
更に、グラデーションのある画像は、減色前にノイズを足してマッハバンド対策。


概要としては・・・
①透過色ありの減色カラーテーブル作成(in Photoshop)。
②透過色なしの減色カラーテーブル作成(in Photoshop)。
③透過色ありのアクション作成(in Photoshop)。
④透過色なしのアクション作成(in Photoshop)。
⑤透過色なしでノイズ足しのアクション作成(in Photoshop)。
⑥バッチファイルで対象ファイルのリスト作成。↓
dosコマンド:あるフォルダ以下のファイルパスをテキスト化。 - redtaxi d-side
⑦上記③〜⑤に当てはまるそれぞれのtxtファイルに仕分け(手作業)
⑧上記③〜⑤のバッチを実行するPhotoshop用のjavascript作成。
⑨実行。


【注意事項】
Adobejavascriptはおそらく拡張されているっぽいので、Fileオブジェクトとかの扱いはコレ↓を参考に。
javascript_tools_guide_cs3
後は、ローカルマシンの↓
C:\Program Files\Adobe\Adobe Photoshop CS3\スクリプティングガイド
あたりも見ながらスクリプティング


今回書いたものは以下。

//"strFileName"で指定したテキストファイル内の絶対パスをファイルオブジェクトの
//配列にして戻す関数。
function myReadTextFile(strFileName){
file_list = [];


fileObj = new File(strFileName);


fileObj.open("r");


// eofが来るまで 1行ごとに読む
while(!fileObj.eof)
{
// ReadLine() で1行読む
tmp = fileObj.readln();
tmpFile = new File(tmp);
file_list.push(tmpFile);
}
// ファイルを閉じる
fileObj.close();
// データを返す
return file_list;
}


//対象画像ファイルの配列作成。
target_list = "D:/work/xx/user/xx/scripts/normal_image_list.txt";
file_list = myReadTextFile(target_list);


//Photoshopバッチ処理設定(同じ場所に上書き保存)。
BatchOptions.destination = BatchDestinationType.SAVEANDCLOSE;
BatchOptions.overrideSave = true;


//実行:ノーマル(透過色無し)画像用
app.batch(file_list, "cnv_16gray", "kent", BatchOptions);