aceprite)色変換のスクリプトをwindowsバッチで起動する

 前回、色変換をスクリプトで実行する方法を紹介しました。

ただ、あの方法だと、変換したいファイルを開き、スクリプトを実行、また次のファイルを開いて実行・・・、と、まだ手作業が多い状況でした。

そこで、windowsのバッチファイルからスクリプトを実行することで、以下のような処理をできるようにしてみます。

①色変換したいacepriteファイルの入ったフォルダを指定
②フォルダ内の全ファイルについて色変換を実行

以下バッチとスクリプトの内容です。

■バッチファイルの内容

@echo off
echo *** フォルダをドロップして下さい。***
set /p dir=""

echo %dir%
cd %dir% 

rem --以下スクリプトパス。使用したいスクリプトのパスを指定すること---------

set script_file="C:\Users\userA\Desktop\desktop\tool\aseprite\Aseprite-v1.3.14.4-x64-Portable\Aseprite-v1.3.14.4-x64\scripts\replace_color_test.lua"


rem --選んだフォルダ内のasepriteファイルに対し、スクリプトを実行-----------

setlocal enabledelayedexpansion
for %%f in (*.aseprite) do (
  set fname=%%f
  set fpath=%dir%\!fname!
  echo !fpath!
  C:\Users\userA\Desktop\desktop\tool\aseprite\Aseprite-v1.3.14.4-x64-Portable\Aseprite-v1.3.14.4-x64\Aseprite.exe -b --script-param param_fpath=!fpath! --script %script_file%
)


echo 完了しました。
pause
exit
■luaスクリプト
--バッチからファイルのフルパスを取得
local param_fpath = app.params["param_fpath"]

--acepriteファイルを開く
local sprite = app.open(param_fpath)

--全層の名称を格納したテーブルを作成
local t_layers = {}
for i, layer in ipairs(sprite.layers) do
    --app.alert (layer.name)
    table.insert(t_layers, layer.name)
end

--全フレームの名称を格納したテーブルを作成
local t_frames = {}
for i, frame in ipairs(sprite.frames) do
    --app.alert (frame.frameNumber)
    table.insert(t_frames, frame.frameNumber)
end

--テーブル指定のレイヤー・フレーム
--(全レイヤー・フレーム)を選択
app.range.layers = t_layers
app.range.frames = t_frames

--カラーモードをindexedに設定
app.command.ChangePixelFormat{
  format="indexed"
}

--色をパレット14⇒26に変更(ui=trueにすれば変更時確認可能)
app.command.ReplaceColor {
  ui=false,
  channels=FilterChannels.INDEX,
  from=Color{index=14},
  to=Color{index=26},
  tolerance=0
}

--セーブ
app.command.SaveFile {}

--acepriteを閉じる
app.exit()

■結果
フォルダ内の全ファイルを変換できます。
詰まったところとして、aceprite.exeの引数の指定順序が重要な点です。
--script-param、の指定が先、--scipt、の指定が後です。
逆にすると、なぜか引き渡せません・・・
これでaceprite関連の処理の効率化が、より捗りそうです。

コメント

このブログの人気の投稿

プラグイン(godot sqlite)を含めてエクスポートすると、データの更新ができない問題

初心者に良い本は? → 『 ゆるっとはじめるGodot Engine ゲームプログラミング 』

他シーンからシグナルを送る方法