RPGツクールMVには、ウィンドウビルダーMADOというウィンドウ作成の公式有料ツールがあります。
手軽にウィンドウ素材を作れるツールなんですが、少し使いずらいところもあります。
それは
- 専用のプラグインが必要(AltWindowFrame.js)
- フレームにマージンが入る
- 自作プラグインのウィンドウには使えない
ということです。
これらの点を解消するべくPHPにて変換プログラムを作成したので、紹介したいと思います。
概要
今回作ったプログラムは簡単に言えば、以下のようにするものになります。

上の画像の左がMADOで出力したファイルで、右が今回のPHPプログラムで変換をかけたファイルです。
このプログラムを使うと
- 既存のウィンドウ規格サイズ(192×192)にする
- フレームのマージンをなくす
ことができます。
同時にMADO専用のプラグインが必要なくなるので、自作プラグインのウィンドウにも適用されるようになります。
プログラム紹介
まずはソースコードからです。
<?php
/*
概要:MADOで作成したウィンドウを既存の仕様に変換する
*/
const IMG_WIDTH = 192;//画像の幅
const IMG_HEIGHT = 192;//画像の高さ
const OUTPUT_FILE_NAME = './Window.png';//出力ファイル名
const INPUT_DIR = './windows';//MADOで出力されたPNG画像があるフォルダ
const USE_FILE = 'Window_Battle.png';
//const USE_FILE = 'Window_Other.png';
//const USE_FILE = 'Window_Status.png';
//const USE_FILE = 'Window_Talk.png';
foreach(glob(INPUT_DIR . '/{*.png}', GLOB_BRACE) as $file){
if ( is_file($file) ) {
$file_only = basename($file);
if ( $file_only == USE_FILE ) {
$input_file = INPUT_DIR .'/' . $file_only;
}
}
}
$input_img = imagecreatefrompng($input_file);
$output_img = imagecreatetruecolor(IMG_WIDTH, IMG_HEIGHT);
imagealphablending($output_img, false);
imagesavealpha($output_img, true);
imagecopy($output_img, $input_img, 0, 0, 0, 0, IMG_WIDTH, IMG_HEIGHT);
imagecopy($output_img, $input_img, 0, 0, 0, IMG_HEIGHT, IMG_WIDTH / 2, IMG_HEIGHT / 2);
$m = 6;
$corner_w = IMG_WIDTH / 8;
$corner_h = IMG_HEIGHT / 8;
$straight_w = IMG_WIDTH / 4;
//左上角
imagecopyresized(
$output_img,//コピー先
$input_img,//コピー元
IMG_WIDTH / 2, 0,//コピー先座標
IMG_WIDTH / 2 + $m, $m,//コピー元座標
$corner_w, $corner_h,//コピー先サイズ
$corner_w, $corner_h//コピー元サイズ
);
//右上角
imagecopyresized(
$output_img,//コピー先
$input_img,//コピー元
IMG_WIDTH - $corner_w, 0,//コピー先座標
IMG_WIDTH - $corner_w - $m, $m,//コピー元座標
$corner_w, $corner_h,//コピー先サイズ
$corner_w, $corner_h//コピー元サイズ
);
//左下角
imagecopyresized(
$output_img,//コピー先
$input_img,//コピー元
IMG_WIDTH / 2, IMG_HEIGHT / 2 - $corner_h,//コピー先座標
IMG_WIDTH / 2 + $m, IMG_HEIGHT / 2 - $corner_h - $m,//コピー元座標
$corner_w, $corner_h,//コピー先サイズ
$corner_w, $corner_h//コピー元サイズ
);
//右下角
imagecopyresized(
$output_img,//コピー先
$input_img,//コピー元
IMG_WIDTH - $corner_w, IMG_HEIGHT / 2 - $corner_h,//コピー先座標
IMG_WIDTH - $corner_w - $m, IMG_HEIGHT / 2 - $corner_h - $m,//コピー元座標
$corner_w, $corner_h,//コピー先サイズ
$corner_w, $corner_h//コピー元サイズ
);
//上直線
imagecopyresized(
$output_img,//コピー先
$input_img,//コピー元
IMG_WIDTH / 2 + $corner_w - $m, 0,//コピー先座標
IMG_WIDTH / 2 + $corner_w, $m,//コピー元座標
$straight_w + $m * 2, $corner_h - $m,//コピー先サイズ
$straight_w, $corner_h - $m//コピー元サイズ
);
//右直線
imagecopyresized(
$output_img,//コピー先
$input_img,//コピー元
IMG_WIDTH - $corner_w + $m, $corner_h - $m,//コピー先座標
IMG_WIDTH - $corner_w, $corner_h,//コピー元座標
$corner_w - $m, $straight_w + $m * 2,//コピー先サイズ
$corner_w - $m, $straight_w//コピー元サイズ
);
//下直線
imagecopyresized(
$output_img,//コピー先
$input_img,//コピー元
IMG_WIDTH / 2 + $corner_w - $m, IMG_HEIGHT / 2 - $corner_h + $m,//コピー先座標
IMG_WIDTH / 2 + $corner_w, IMG_HEIGHT / 2 - $corner_h,//コピー元座標
$straight_w + $m * 2, $corner_h - $m,//コピー先サイズ
$straight_w, $corner_h - $m//コピー元サイズ
);
//左直線
imagecopyresized(
$output_img,//コピー先
$input_img,//コピー元
IMG_WIDTH / 2, $corner_h - $m,//コピー先座標
IMG_WIDTH / 2 + $m, $corner_h,//コピー元座標
$corner_w - $m, $straight_w + $m * 2,//コピー先サイズ
$corner_w - $m, $straight_w//コピー元サイズ
);
imagepng($output_img, OUTPUT_FILE_NAME, 0);
imagedestroy($input_img);
imagedestroy($output_img);
?>
使ってみたい人は、上記ソースコードをコピペして使ってください。
プログラムの使い方
このPHPプログラムを使う前提として、PHPがインストールされている必要があります。
※ここではインストールについては説明しません。
※僕のPHPは7.4.5を使っています。
使い方は
- プログラムを好きなフォルダに置く(convert.phpとする)
- MADOで出力したPNG画像を好きなフォルダに置く(windowsとする)
- convert.phpのINPUT_DIRに2のフォルダを設定する
- convert.phpのOUTPUT_FILE_NAMEに出力する画像名を設定する(Window.pngとする)
- コマンドプロンプトで1のフォルダに移動する
- >php convert.phpで実行する
です。
注意点
このプログラムですが、フレームのマージンを6pxとしています。
マージンが異なる場合や、フレームが変則的な形をしている場合は、うまくいかないかもしれません。
また、フレームのコーナーはそのままですが、ストレートの部分は伸ばしているので、フレームの柄によっては継ぎ目ができてしまう場合もあります。
コメント
[…] 2020.7.31 追記MADOで出力したウィンドウ画像を本来の規格に変換するプログラムを作ってみました。詳細はコチラ。 […]