以下のような2つのBMP画像がある場合、自動でマスク画像を合成して、以下のような1つのPNG画像を作ってくれるPhotoshopのjsxスクリプトです。
↓
キャラの足下の影の部分が半透明になっていますね。24bit RGB画像に8bitアルファを持つ、32bit RGBAのPNGファイルを出力します。 Windows7 + PhotoshopCS4で動作を確認。
mixMaskImage.jsx
//for PhotoshopCS4
preferences.rulerUnits = Units.PIXELS;
//特定のフォルダ配下の「*-m.bmp」「*-M.bmp」を順にすべて開く
var dirObj = Folder.selectDialog("フォルダを選択せよ");
var maskFiles = dirObj.getFiles("*-?.bmp");
for(var i=0; i<maskFiles.length; i++){
//var i = 0; ←スクリプト作成中に動作確認するとき、ループのforをcomment化して、これでtest
var tmpArray = maskFiles[i].name.split(/\-.\./i);
// 最後のdirectory separator以下(=ファイル名)を削除
var theDir = maskFiles[i].fsName.replace(/[\/\\][^\/\\]*$/, '/');
//alert('maskFiles.fsName='+maskFiles[i].fsName + ', theDir='+theDir);
var imgFile = new File(theDir + tmpArray[0] + '.bmp');
//alert('mask='+maskFiles[i] + ', img='+imgFile + ', tmpArray='+tmpArray + ', dirObj='+dirObj);
//マスクファイル開く
var theMask = app.open(maskFiles[i]);
//indexMode→GrayScaleに変更。これしないと[選択範囲を読み込む]ができない
theMask.changeMode(ChangeMode.GRAYSCALE);
//theMask.activeLayer.invert();
//画像ファイル開く
var theImg = app.open(imgFile);
//「背景」→「レイヤー0」にする。これしないと削除した箇所が透明にならない
if (theImg.activeLayer.isBackgroundLayer) theImg.activeLayer.opacity = 100;
//選択範囲を読み込む→削除→選択解除
theImg.selection.load(theMask.channels[0]);
theImg.selection.clear();
theImg.selection.deselect();
//マスクファイル閉じる
theMask.close(SaveOptions.DONOTSAVECHANGES);
//新規ファイル名でPNGとして保存→閉じる
var newFile = new File(theDir + tmpArray[0] + '.png');
var pngOpt = new PNGSaveOptions();
pngOpt.interlaced = false;
theImg.saveAs(newFile, pngOpt, true);
theImg.close(SaveOptions.DONOTSAVECHANGES);
}これをテキストファイルに文字コードUTF-8で保存して、[ファイル-スクリプト-参照]で実行します。
- 本体画像:例「ABC012.bmp」 24bit BMP
- マスク画像:例「ABC012-m.bmp」または「ABC012-M.bmp」 8bit BMP
が同じフォルダに置いてある、そのフォルダを指定します。
あとは自動で実行してくれますよ。そのフォルダにBMP画像を複数置いておけば、複数ファイルをまとめて処理してくれます。
マスク画像の白黒が逆(黒が透明)の時は、スクリプトを以下に変更してください。マスク画像に対して[イメージ-色調補正-階調の反転]処理を追加しています。
--- R:/mixMaskImage.jsx.original Tue Dec 24 09:30:16 2013
+++ R:/mixMaskImage.jsx Tue Dec 24 09:32:24 2013
@@ -19,11 +19,11 @@
//マスクファイル開く
var theMask = app.open(maskFiles[i]);
//indexMode→GrayScaleに変更。これしないと[選択範囲を読み込む]ができない
theMask.changeMode(ChangeMode.GRAYSCALE);
- //theMask.activeLayer.invert();
+ theMask.activeLayer.invert();
//画像ファイル開く
var theImg = app.open(imgFile);
//「背景」→「レイヤー0」にする。これしないと削除した箇所が透明にならない
if (theImg.activeLayer.isBackgroundLayer) theImg.activeLayer.opacity = 100;使用したキャラチップ First Seed Material http://www.tekepon.net/fsm
スクリプトで参考にしたサイト: http://www.openspc2.org/book/PhotoshopCS4/



0 件のコメント:
コメントを投稿