ひょんなことからRPGツクールVXの歩行グラフィックス(通称:歩行グラ)のトリミングを行うことになったのだけど、丁度いい手頃なツールが見当たらなかったので作ることに。
下の画像がRPGツクールVX規格の歩行グラの例です。簡単に言えばこれを12分割したいということです。
今回は説明用に「ゆらゆらドット。」様の素材を使用させて頂きました。
dotrpg.blog.fc2.com
今回は画像を手軽に扱いたかったので、RubyのRMagickを採用することにしました。
RMagickでの画像のトリミングは本当に簡単で、単純に切り抜くだけなら以下の数行で終わります。
サンプル(Ruby) :
require 'RMagick'
original = Magick::ImageList.new("input.png") # input.pngを取り込む
image = original.crop(0, 0, 48, 80) # (x = 0px, y = 0px) を左上として(width = 48px, height = 80px)を切り取る
image.write("output.png") # output.pngとして出力する
実行結果 : output.png
しっかり指定サイズで切り抜かれています。
そんでもって今の作業を12回繰り返さなければならないので、これを汎用化した便利プログラムを作成しました。
プログラム : splitter.rb
#!/usr/bin/ruby
require 'RMagick'
require 'optparse'
file = ARGV[0]
cols = 3
rows = 4
opt = OptionParser.new
opt.on('-c', '--cols ITEM', '分割する列の数') { |v| cols = v.to_i }
opt.on('-r', '--rows ITEM', '分割する行の数') { |v| rows = v.to_i }
opt.banner += ' file'
begin
opt.parse(ARGV)
rescue OptionParser::InvalidOption => e
abort("無効なオプション指定が含まれています")
end
if (!file || !cols || !rows)
abort("必要な引数が与えられていません")
end
begin
original = Magick::ImageList.new(file)
rescue => error
abort("ファイルが読み込めません")
end
width = original.columns / cols #幅
height = original.rows / rows #高さ
file_parts = file.split("\.")
output_file_base_name = file_parts[0]
extension = ""
if file_parts[1]
extension = ".#{file_parts[1]}"
end
for i in 1..cols
for j in 1..rows
image = original.crop(width * (i - 1), height * (j - 1), width, height)
image.write("#{output_file_base_name}.#{i}-#{j}#{extension}")
end
end
使い方は単純に、ruby splitter.rb input.pngで、input.pngが12分割されます。
分割された後の名前は、「(元ファイルの拡張子以外).横x縦(元ファイルの拡張子)」になります。
またオプションで分割する列の数と行の数を指定することも可能にしてあります。
何か他に使い道あるかな?笑