概要
2DのRPGなどを作っていて、モンスターの一枚絵を手に入れたのでこれから4方向ホコグラをつくるために1枚の絵を等倍で縦3横4個ずつ並べて結合したい瞬間はありませんか、今の私がまさにそれです。
毎回ペイントソフトで並べてたら人生がいくつあっても足りませんね、コマンド一発で終わらせてみましょう。
環境
Windows11
参考
やること
ImageMagickをインストールします。
左上の「Download」から「Windows Binary Release」の適当なファイルをダウンロードしてインストールしてください。
今回は「ImageMagick-7.1.1-22-Q16-HDRI-x64-dll.exe」をインストールしました。
一枚ずつコマンドで結合する
今回はこういう画像を用意して「image.png」という名前で保存します。
cdコマンドか、対象の画像があるフォルダまで移動して現在地が出てくるバーで「cmd」と入力するとコマンドプロンプトが出てきます。
コマンドプロントが出てきたら下記のコマンドを実行します。
magick montage -tile 3x4 -geometry +0+0 image.png image.png image.png image.png image.png image.png image.png image.png image.png image.png image.png image.png result.png
すると、「result.png」という名前で下記のような結合画像が生成されます。
まとめてバッチで結合する
magick montage -tileのコマンドでは、結合したい分の画像名をファイル名を書かないといけないのですが、毎回12個もファイル名を打つのはとてもだるいのでバッチで自動化します。
下記のコードをテキストファイルにコピーして拡張子を「.bat」とし、変換したい画像が入っているフォルダにいれて実行してください。
画像名に半角スペースがあるとダブルクォーテーションでくくっても動かないので、「 」を「_」にファイル名に書き換える処理が入っています。あしからず。
キャラチップに使うので透過処理も入っています。アルファ値などで半透明になっている部分はうまく透過できません、何かいい方法ないかな…。
「-geometry +1+1」で縦横1ピクセル開けて結合し、線で閉じられていない部分の背景色を透過しています。
@echo off setlocal enabledelayedexpansion rem 画像ファイルの拡張子のリスト set "EXTENSIONS=.png" rem カレントフォルダ内の画像ファイルを結合 for %%i in (%EXTENSIONS%) do ( for %%f in (*%%i) do ( rem 半角スペースをアンダースコアに置き換え set "filename=%%f" set "new_filename=!filename: =_!" rem ファイル名を書き換え ren "%%f" "!new_filename!" rem ファイル結合 echo Processing: !new_filename! magick montage -tile 3x4 -geometry +1+1 !new_filename! !new_filename! !new_filename! !new_filename! !new_filename! !new_filename! !new_filename! !new_filename! !new_filename! !new_filename! !new_filename! !new_filename! chara_!new_filename! rem 透過処理 magick chara_!new_filename! -alpha set -background none -channel RGBA -fill "#00000000" -fuzz 5% -draw "alpha 1,1 floodfill" chara_!new_filename! ) ) endlocal pause
おわり。