編集した画像を自動的に拡大するプログラム【RPGツクールMZ&MV】

2021年05月06日

 現代のツクールでツクール2000のドット絵を使おう!から続きます。

 更新された画像を検出し、拡大とコピーを同時に行うプログラムです。


 ツクール2000(あるいはSFC)と同等の解像度のドット絵を編集すれば、自動的に拡大してツクールMZやMVのプロジェクトへと反映します。これにより手動での拡大&縮小を行う手間を省きます。
 (ツクールXP〜VXAceでも設定を変えれば使えます。)

目次


注意!(caution!)

履歴(history)

導入(install)

元画像用のフォルダを作成(original folder)

設定ファイルの編集(setting)

元画像の配置(original image)

実行(execute)

スケジュール登録(schedule)

同期を秒単位に(extension) 2021/05/06追記


注意!(caution!)


 ファイルの上書きを行うプログラムであるため、誤って上書きするなどの事故に注意してください。念のため、先にプロジェクトのバックアップを取ることを推奨します。
 くれぐれも自己責任でよろしくお願いします。


 Macなど非Windows環境ではたぶん動きません。

更新履歴(history)


2021/05/06


2020/11/01(ver1.00)

  • 公開!


導入(install)


 以下のzipファイルをダウンロードして解凍し、任意の場所に配置してください。
 https://newrpg.up.seesaa.net/mv/NRP_ImageScaleSync.zip

 ※動作には.NET Core 3.1が必要な模様です。
  インストールされていない場合は以下よりDLしてください。
  https://dotnet.microsoft.com/download/dotnet


 その後、以下の使用法を参考に設定と実行を行ってください。

元画像用のフォルダを作成


 元画像を配置するフォルダを作成します。以降、素材を編集する際はこのフォルダ内のファイルに対して行うようにします。

 解凍したフォルダに含まれている『original』フォルダをどこかにコピーするのが手っ取り早いです。ゲームプロジェクトの中でも外でも好きな場所に配置してください。

 中身は単なる空のフォルダ群ですが、『@CHARACTERS』『@TILESETS』というように、ツクールMZやMVで使用されているフォルダに対応した名前になっています。
 ※フォルダ名は自分で決めても構いません。ただし、事故防止のため分かりやすいものにしたほうが安全です。

設定ファイルの編集(setting)


 解凍したフォルダにある『setting.xml』が設定ファイルです。テキストエディタで開いて編集してください。
 中身は以下のようになっています。(見やすいように編集しています。)

<?xml version="1.0" encoding="utf-8"?>
<setting>
<!-- 前回更新日時(※この後に更新された画像を対象とします。) -->
<lastTime>2020/10/31 00:00:00</lastTime>

<!-- パス用の文字列を定義します。 -->
<!-- <FROM_DIR>の値は%FROM_DIR%, <TO_DIR>の値は%TO_DIR%というように参照できます。 -->

<define>
<FROM_DIR>C:\Project\img\original</FROM_DIR>
<TO_DIR>C:\Project\img</TO_DIR>
</define>

<!-- コピー後の画像倍率 -->
<scale>3</scale>

<!-- from -> toへコピー -->
<path>
<from>%FROM_DIR%\@BATTLEBACS1</from>
<to>%TO_DIR%\battlebacks1</to>
</path>

<path>
<from>%FROM_DIR%\@BATTLEBACS2</from>
<to>%TO_DIR%\battlebacks2</to>
</path>

 〜中略〜

<!-- MV Only (必要なら注釈を外してください) -->
<!--
<path>
<from>%FROM_DIR%\@ANIMATIONS</from>
<to>%TO_DIR%\animations</to>
<scale>2</scale>
</path>
-->


</setting>

 以下、解説していきます。

<lastTime>2020/10/31 00:00:00</lastTime>

 最後にプログラムを実行した時刻です。
 プログラムの実行が成功する度、自動的に値が書き換えられます。
 この時刻と画像ファイルの更新時刻を比較することで、新たに更新された画像だけを抽出しています。

 手動で古い時刻を設定すれば、強制的に画像を処理対象とすることもできます。

<FROM_DIR>C:\Project\img\original</FROM_DIR>

 画像のコピー元となる大元のフォルダのパスです。
 %FROM_DIR%と入力すれば、設定値を参照できます。

 先程配置したフォルダのパスを指定してください。

<TO_DIR>C:\Project\img</TO_DIR>

 画像のコピー先となる大元のフォルダのパスです。
 %TO_DIR%と入力すれば、設定値を参照できます。

 対象となるゲームプロジェクトのimgフォルダを指定してください。

<scale>3</scale>

 画像を拡大する倍率です。通常は元のまま3倍にしておけばOKです。
 コピーするフォルダによって、個別に倍率を指定(後述)することもできます。

<path></path>

 実際にコピーを行う各フォルダのパスを指定します。

<path>
<from>%FROM_DIR%\@BATTLEBACS1</from>
<to>%TO_DIR%\battlebacks1</to>
</path>

 同じようにして『battlebacks1』『battlebacks2』『characters』『enemies』『faces』『parallaxes』『pictures』『sv_actors』『sv_enemies』『system』『tilesets』『titles1』『titles2』の各フォルダのパスが最初から定義されています。

『%FROM_DIR%』『%TO_DIR%』の値は上で説明した通りです。あちらの設定さえ行えば、こちらの変更はほぼ不要です。
 ちなみに『%FROM_DIR%』『%TO_DIR%』を使わず普通に絶対パスを指定しても構いません。

 ただし『animations』だけは例外なので注意してください。MZだと初期状態では存在しないフォルダのため、注釈化しています。
 必要ならば<!---->を消して注釈を解除してください。
 ※なお、存在しないフォルダを指定するとエラーログを出力する仕様です。


<!--
<path>
<from>%FROM_DIR%\@ANIMATIONS</from>
<to>%TO_DIR%\animations</to>
<scale>2</scale>
</path>
-->


 また、ここでは<scale>2</scale>というように個別の倍率を指定しています。アニメーションのみ素材規格の比率が異なるためです。

 以上で設定ファイルの編集は終わりです。

元画像の配置


 元画像用のフォルダに、原寸大の画像ファイルを配置してください。

 背景色の指定がない256色画像の場合、パレットの左上の色を透明な背景色として使用します。

注意!

 背景色と同色(RGB値が完全一致)を他の箇所に使っている場合、意図しない部分が透明となる可能性があります。
 例えば、『背景が黒』『目の色も黒』という画像を処理した場合、変換後の画像が目の色まで透明になってしまいます。
 対処するには「RGB値を1つずらす」「背景色をあらかじめ指定する」といった方法があります。


 なお、実行対象となるのは<lastTime>で設定した時刻よりも、後に更新されたファイルだけです。必要ならばタイムスタンプを編集するか、<lastTime>の時刻を変更してください。

 参考:タイムスタンプを変更できるフリーソフト。
 https://dns-plus.net/ctime.html

 ※あまり多くのファイルをまとめて処理すると時間がかかるので、少しずつ対象を増やしていくことをオススメします。

実行(execute)


 ようやくプログラムを実行します。
 解凍したフォルダにある『ImageScaleSync.exe』を実行してください。

 ※注意!:実行する前に『setting.xml』を閉じてください。編集中のままだと実行に失敗する仕様です。

 実行状況は表示されませんが、コピー先のファイルが更新されていくので、そちらを確認してください。
 ※ファイルの大きさにもよりますが、1ファイル1秒程度の時間がかかります。

 また処理が完了した場合は、実行ファイルと同じフォルダにログが出力されます。
 成功の場合は『result.log』、エラーの場合は『error.log』が出力されますので確認してください。

 一度実行してしまえば、以降は更新された差分だけがコピーされるようになります。

 ツクール上からも確認して、素材が想定通りに反映されていることを確認してください。

スケジュール登録(schedule)


 さて、exeを実行することによって画像が拡大&反映されるようになりました。
 ……が、現状では画像を更新する度にいちいち手動でexeを実行する必要があります。

 そこで実行ファイルをスケジュール登録することで、定期的に更新を監視してコピーを行うようにします。
 Windowsのタスクスケジューラで指定してもよいし、同等の機能を持ったフリーソフトを使っても構いません。

 ここでは以下のフリーソフトを使って手順を説明します。

 Multi Function Alarm
 https://forest.watch.impress.co.jp/library/software/mltfncalarm/

 1.ダウンロード&解凍して、適当なフォルダに配置します。

 2.『MFA.exe』を実行します。

 3.サンプルのメッセージが色々出ますので適当にOKしていきます。

 4.最後の「スタートアップにMFA.exeのショートカット作成しますか?」のメッセージも「はい」にしてください。
 これにより、PC起動時にソフトが起動するようになります。

 5.色々設定がありますが、全選択&削除でOKです。



 6.さらに追加を押して、以下のように設定します。
 『入力・修正』から『ImageScaleSync.exe』のパスを設定してください。


 ご覧の通り、1分毎にexeを実行する設定にしてみました。つまり更新した素材の反映には最長1分かかります。このソフトではこれ以上短くはできません。
 もし必要なら『ImageScaleSync.exe』を直接叩けば即時反映されます。
 ※実用上そこまで困ることもないと思うのですが、秒単位で監視したいならタスクスケジューラや他のソフトを使えばよいかもしれません。

 6.OK→OKで閉じます。
 以後、このソフトは右下のタスクトレイに格納されます。タスクスケジューラに設定した場合と違って、存在を忘れにくいので安心ですね。
 もし、不要になった場合はスタートアップからショートカットを削除するなりしてください。
 ※ちなみに、スタートアップはエクスプローラーで『shell:startup』のアドレスを叩けば開けます。

 これにて設定完了です。
 あとは実際に画像素材を編集してみて、1分ほどでプロジェクトに反映されるかを確認してみてください。

 以上、お疲れさまでした!
 拡大・縮小の手間がいらない快適なドット絵ライフをお楽しみください。

同期を秒単位に(extension) 2021/05/06追記


 さらなる改良を行い、画像の反映を10秒毎に行うようにしてみました。
 負荷軽減のため、RPGツクールMZが起動中の場合のみ同期処理を実行するようにしています。

 以下のvbsファイルを保存し、『ImageScaleSync.exe』と同じフォルダに配置してください。
 exeではなく、vbsのほうをスケジュール登録すればOKです。

 ImageScaleSync.vbs

 中身は以下の通りです。
 ツクールMVの場合は、赤字部分を『RPGMV.exe』に変更してください。

'監視するプロセス名
'MVの場合はRPGMV.exeに変更すればOK。
Dim processName
processName = "RPGMZ.exe"

Dim exeName
exeName = "ImageScaleSync.exe"

Dim Service,QfeSet
Set Service = CreateObject("WbemScripting.SWbemLocator").ConnectServer
Set QfeSet = Service.ExecQuery("Select * From Win32_Process Where Caption='" & processName & "'")

'プロセスが存在するなら処理実行
If QfeSet.Count > 0 Then
Set objWShell = CreateObject("Wscript.Shell")

'処理実行
objWShell.run exeName, vbHide

'10000ミリ秒(10秒)待って再度処理実行
'以降、繰り返し
WScript.Sleep 10000
objWShell.run exeName, vbHide

WScript.Sleep 10000
objWShell.run exeName, vbHide

WScript.Sleep 10000
objWShell.run exeName, vbHide

WScript.Sleep 10000
objWShell.run exeName, vbHide

WScript.Sleep 10000
objWShell.run exeName, vbHide
End If

 ごく単純に「処理実行→10秒待つ→処理実行」を6回繰り返しているだけです。
 このvbs自体は1分毎に実行されるので、合わせて10秒毎にプログラムが実行されます。 

 例えば、5秒毎にしたい場合は「WScript.Sleep 10000」の値を『5000』に変更して処理を12回実行するようにすればOKです。

 >RPGツクールMZ&MV目次に戻る
posted by 砂川赳 at 10:26 | RPGツクールMZ&MV | このブログの読者になる | 更新情報をチェックする