From e1f5e5e92ae9ed20c522acb3b61ec75bd2084458 Mon Sep 17 00:00:00 2001 From: bridge Date: Tue, 30 Dec 2025 22:43:04 +0800 Subject: [PATCH] refactor pack --- slice_images.py | 109 ------------------------------------------------ 1 file changed, 109 deletions(-) delete mode 100644 slice_images.py diff --git a/slice_images.py b/slice_images.py deleted file mode 100644 index 144c5b8..0000000 --- a/slice_images.py +++ /dev/null @@ -1,109 +0,0 @@ -""" -图片切分工具:将2x2大图切分为4个64x64的tile切片。 - -用法: - python tools/slice_images.py # 仅切分未处理的图片 - python tools/slice_images.py --force # 强制重新切分所有图片 -""" -import os -from PIL import Image -import glob - -BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) -ASSETS_DIR = os.path.join(BASE_DIR, "assets") - -TARGET_SIZE = (128, 128) # 2x2 tile size (64*2) -TILE_SIZE = 64 - - -def slice_image(image_path, force=False): - """ - 切分图片为4个64x64的tile。 - 如果已存在切片文件且force=False,则跳过。 - """ - base_name, ext = os.path.splitext(image_path) - - # 检查是否已切分(通过检查_0文件是否存在) - slice_0_path = f"{base_name}_0{ext}" - if os.path.exists(slice_0_path) and not force: - print(f"Skipped (already sliced): {os.path.basename(image_path)}") - return - - try: - img = Image.open(image_path) - # Resize if necessary (to match 2x2 tiles exactly) - if img.size != TARGET_SIZE: - img = img.resize(TARGET_SIZE, Image.Resampling.LANCZOS) - - # 0: TL, 1: TR, 2: BL, 3: BR - pieces = [ - (0, 0, TILE_SIZE, TILE_SIZE), # TL - (TILE_SIZE, 0, TILE_SIZE * 2, TILE_SIZE), # TR - (0, TILE_SIZE, TILE_SIZE, TILE_SIZE * 2), # BL - (TILE_SIZE, TILE_SIZE, TILE_SIZE * 2, TILE_SIZE * 2) # BR - ] - - for i, box in enumerate(pieces): - piece = img.crop(box) - save_path = f"{base_name}_{i}{ext}" - piece.save(save_path) - - print(f"Sliced: {os.path.basename(image_path)}") - - except Exception as e: - print(f"Error slicing {image_path}: {e}") - - -def process_folder(folder_name, extensions=['.png', '.jpg', '.jpeg'], force=False): - folder_path = os.path.join(ASSETS_DIR, folder_name) - if not os.path.exists(folder_path): - print(f"Folder not found: {folder_path}") - return - - files = [] - for ext in extensions: - files.extend(glob.glob(os.path.join(folder_path, f"*{ext}"))) - - for f in files: - # Skip already sliced files (ending with _0, _1, _2, _3) - stem = os.path.splitext(os.path.basename(f))[0] - if len(stem) >= 2 and stem[-2] == '_' and stem[-1] in ['0', '1', '2', '3']: - continue - - slice_image(f, force) - - -def process_specific_files(folder_name, filenames, force=False): - folder_path = os.path.join(ASSETS_DIR, folder_name) - for name in filenames: - # Try png/jpg - found = False - for ext in ['.png', '.jpg']: - path = os.path.join(folder_path, name + ext) - if os.path.exists(path): - slice_image(path, force) - found = True - break - if not found: - print(f"File not found: {name} in {folder_name}") - - -if __name__ == "__main__": - import sys - force = '--force' in sys.argv - - print("Starting image slicing..." + (" (FORCE MODE)" if force else "")) - - # 1. Sects - print("\nProcessing Sects...") - process_folder("sects", force=force) - - # 2. Cities - print("\nProcessing Cities...") - process_folder("cities", force=force) - - # 3. Special Tiles (Cave, Ruin) - print("\nProcessing Special Tiles...") - process_specific_files("tiles", ["cave", "ruin"], force=force) - - print("\nDone.")