Quantcast
Channel: itouhiroはてなブログ
Viewing all articles
Browse latest Browse all 107

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

$
0
0

以下のような2つのBMP画像がある場合、自動でマスク画像を合成して、以下のような1つのPNG画像を作ってくれるPhotoshopのjsxスクリプトです。


f:id:itouhiro:20131223213230p:plain


f:id:itouhiro:20131223213456p:plain


キャラの足下の影の部分が半透明になっていますね。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で保存して、[ファイル-スクリプト-参照]で実行します。
f:id:itouhiro:20131223221018p:plain


本体画像:例「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/



神速Photoshop [グラフィックデザイン編]

神速Photoshop [グラフィックデザイン編]




 


Viewing all articles
Browse latest Browse all 107

Trending Articles