initial upload
This commit is contained in:
parent
1f4922ce56
commit
29a254fbbb
397 changed files with 13623 additions and 0 deletions
116
tools/spritesheet_creator/spritesheet_creator.py
Normal file
116
tools/spritesheet_creator/spritesheet_creator.py
Normal file
|
|
@ -0,0 +1,116 @@
|
|||
import pygame
|
||||
import os
|
||||
import shutil
|
||||
|
||||
def create_spritesheet(image_paths, output_path, rows=1, padding=0):
|
||||
"""
|
||||
Combine multiple images into a single spritesheet.
|
||||
|
||||
Args:
|
||||
image_paths (list): List of paths to source images
|
||||
output_path (str): Path to save the combined spritesheet
|
||||
rows (int): Number of rows in the spritesheet
|
||||
padding (int): Pixel padding between images
|
||||
"""
|
||||
if not image_paths:
|
||||
raise ValueError("No images provided")
|
||||
|
||||
# Load all images
|
||||
images = []
|
||||
max_width = 0
|
||||
max_height = 0
|
||||
|
||||
for path in image_paths:
|
||||
try:
|
||||
img = pygame.image.load(path)#.convert_alpha()
|
||||
images.append(img)
|
||||
max_width = max(max_width, img.get_width())
|
||||
max_height = max(max_height, img.get_height())
|
||||
except pygame.error as e:
|
||||
print(f"Failed to load {path}: {e}")
|
||||
continue
|
||||
|
||||
if not images:
|
||||
raise ValueError("No valid images loaded")
|
||||
|
||||
# Calculate spritesheet dimensions
|
||||
cols = (len(images) + rows - 1) // rows
|
||||
sheet_width = cols * (max_width + padding) - padding
|
||||
sheet_height = rows * (max_height + padding) - padding
|
||||
|
||||
# Create blank spritesheet surface
|
||||
spritesheet = pygame.Surface((sheet_width, sheet_height), pygame.SRCALPHA)
|
||||
|
||||
# Blit images onto spritesheet
|
||||
for i, img in enumerate(images):
|
||||
row = i // cols
|
||||
col = i % cols
|
||||
x = col * (max_width + padding)
|
||||
y = row * (max_height + padding)
|
||||
spritesheet.blit(img, (x, y))
|
||||
|
||||
# Save the spritesheet
|
||||
print(f"dir: {os.getcwd()}")
|
||||
pygame.image.save(spritesheet, output_path)
|
||||
print(f"Spritesheet saved to {output_path}")
|
||||
|
||||
return max_width, max_height
|
||||
|
||||
|
||||
|
||||
|
||||
pygame.init()
|
||||
|
||||
tool_root_dir = os.getcwd()
|
||||
|
||||
# Because os.rmdir() only works on empty directories
|
||||
if os.path.isdir(f"{tool_root_dir}/output"): shutil.rmtree(f"{tool_root_dir}/output")
|
||||
os.mkdir(f"{tool_root_dir}/output")
|
||||
|
||||
spritesheet_names = os.listdir(f"{tool_root_dir}/input")
|
||||
|
||||
for spritesheet_name in spritesheet_names:
|
||||
|
||||
source_dir=f"{tool_root_dir}/input/{spritesheet_name}"
|
||||
target_dir=f"{tool_root_dir}/output/"
|
||||
|
||||
filenames = os.listdir(f"{source_dir}")
|
||||
|
||||
# List of image paths to combine
|
||||
image_files = filenames
|
||||
|
||||
cols=8
|
||||
rows=len(image_files)//cols + 1
|
||||
|
||||
print(f"Dir: {os.getcwd()}")
|
||||
print(f"Target: {target_dir}")
|
||||
|
||||
## Create and save spritesheet
|
||||
os.chdir(source_dir)
|
||||
(tile_width, tile_height) = create_spritesheet(image_files, f"{target_dir}/{spritesheet_name}_spritesheet.png", rows, padding=1)
|
||||
spritesheet_filename = f"{target_dir}/{spritesheet_name}_{tile_width}x{tile_height}_spritesheet.png"
|
||||
os.rename(f"{target_dir}/{spritesheet_name}_spritesheet.png", spritesheet_filename)
|
||||
|
||||
## Create+Store metadata
|
||||
mapping = ["x_col,y_col,tilename"]
|
||||
|
||||
for index, filename in enumerate(image_files):
|
||||
#x_col = index // cols
|
||||
#y_row = index - x_col * cols
|
||||
y_row = index // cols
|
||||
x_col = index - y_row * cols
|
||||
|
||||
print(f"[{spritesheet_name}] : {index} - [{x_col},{y_row}] -> {filename}")
|
||||
tilename = filename.split(".")[0]
|
||||
mapping.append( f"{x_col},{y_row},{tilename}" )
|
||||
|
||||
print(f"Wrote {spritesheet_filename}")
|
||||
|
||||
|
||||
mapping_filename = f"{target_dir}/{spritesheet_name}_{tile_width}x{tile_height}_mapping.txt"
|
||||
f = open(mapping_filename,"w")
|
||||
f.write("\n".join(mapping))
|
||||
f.close()
|
||||
print(f"Wrote {mapping_filename}")
|
||||
|
||||
os.chdir(f"{tool_root_dir}")
|
||||
Loading…
Add table
Add a link
Reference in a new issue