mapchipをトリミングする
必要なmapchipを選び出す
ファイル名を変更する
(番号を揃えます。あとでmapchip.datファイルにまとめて書き込むためです)
背景を貼り付ける
mapchipフォルダーに移動させる
mapchip.datに書き込む
画像ID番号は上にある番号のつづきになります。
上にあるのは、576なので577を入力します。
トリミング
import cv2
import numpy as np
import os
# スクリプトが存在するフォルダのパスを取得
file_path = os.path.dirname(os.path.abspath(__file__))
file_name = input("ファイル名: ")
num = input("最初の番号: ")
# タイルのサイズ
GS = 32
# フォルダ内のすべてのファイルを処理
for filename in os.listdir(file_path):
if filename.endswith(".png"):
# 元画像のパスを指定
input_img = cv2.imread(os.path.join(file_path, filename), cv2.IMREAD_UNCHANGED)
# 元画像の高さ、幅を取得
height, width = input_img.shape[:2]
# タイルの数を計算
num_tiles_y = height // GS
num_tiles_x = width // GS
# 背景色を指定(透明)
background_color = (0, 0, 0, 0)
for y in range(num_tiles_y):
for x in range(num_tiles_x):
# トリミングする範囲を指定
output_img = input_img[y*GS:(y+1)*GS, x*GS:(x+1)*GS]
# 背景色を設定
bg_img = np.full((GS, GS, 4), background_color, dtype=np.uint8)
bg_img[0:output_img.shape[0], 0:output_img.shape[1], :3] = output_img[:, :, :3]
bg_img[0:output_img.shape[0], 0:output_img.shape[1], 3] = output_img[:, :, 3]
# ファイル名
filename_trimmed = f'{file_name}{num}.png'
# トリミングした画像を新しいファイルに保存
cv2.imwrite(os.path.join(file_path, filename_trimmed), bg_img)
num = int(num)
num += 1
num = str(num)
print("完了しました")
ファイル名変更
import os
# フォルダのパスを指定
#folder_path = input("フォルダー名: ")
folder_path = os.getcwd()
# フォルダ内のファイル一覧を取得
file_list = os.listdir(folder_path)
new_name = input("新しいファイル名: ")
k = input("最初の番号: ")
# ファイル名を変更
for i, file_name in enumerate(file_list):
if file_name.endswith('.png'):
# フルパスを作成
old_file = os.path.join(folder_path, file_name)
# ファイル名を変更
os.rename(old_file,f"{new_name}{k}.png")
k = int(k)
k += 1
k = str(k)
print("ファイル名の変更が完了しました。")
貼り付け
from PIL import Image
filename1 = input("下地ファイル名: ")
filename2 = input("貼り付けファイル名: ")
k = input("最初の番号: ")
num = int(input("画像の数: "))
for i in range(num):
# 画像を読み込む
background = Image.open(f"{filename1}.png")
overlay = Image.open(f"{filename2}{k}.png")
overlay = overlay.convert("RGBA")
# 貼り付ける位置を指定(例:左上に貼り付け)
position = (0, 0)
# 画像を貼り付ける
background.paste(overlay, position, overlay)
# 結果を保存
background.save(f"{filename2}{k}.png")
k = int(k)
k += 1
k = str(k)
print("完了しました")
mapchip.dat書き込み
# ファイルを読み込む
with open('mapchip.dat', 'r') as file:
data = file.read()
# 読み込んだデータを表示(必要に応じて)
print("元のデータ:")
print(data)
j = int(input("画像ID番号: "))
name = input("ファイル名: ")
k = int(input("最初の番号: "))
num = int(input("画像の数: "))
for i in range(num):
text_message = f"{j},{name}{k},0,0\n"
# 書き込みたい文字列を指定
text_to_write = text_message
# 変更したデータを新しいファイルに書き込む
with open('mapchip.dat', 'a') as file:
file.write(text_to_write)
j += 1
k += 1
with open('mapchip.dat', 'r') as file:
data = file.read()
# 書き込んだデータを表示(必要に応じて)
print("新しいデータ:")
print(data)
print("完了しました。")
移動可能なmapchipを指定する。
赤い線のところを1にすると、移動可能です。0だと移動不可です。(デフォルトは0です)
赤い線の隣は、透明な背景があるかどうかです。
この記事に載せているトリミングのコードを使った場合、
ぴぽや倉庫さんの画像をOBJECTとして描画するには
赤い線の隣の0を、1にして、
TRANS_COLOR = (0,0,0) にします。
黒だとよく使われる色なのでうまくいかないような気がしてきました。
OBJECTについてはaidiaryさんの記事を読まないといけません。
いきなりOBJECTといわれても意味が分からないと思うので、最初からaidiaryさんの記事を読むとよいです。