2013-12-23

Photoshopでマスク画像を合成して32bitPNG画像を出力するjsx

以下のような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 件のコメント:

コメントを投稿

人気記事