82 lines
2.3 KiB
Python
82 lines
2.3 KiB
Python
from PIL import Image
|
|
import os
|
|
import json
|
|
|
|
# The size of each image in pixels.
|
|
IMAGE_SIZE = 16
|
|
# The directory containing the item image files.
|
|
ITEM_DIR = "item/"
|
|
# The directory that willcontain the texture sheet files.
|
|
SHEET_DIR = "sheets/"
|
|
|
|
# The size that the texture sheet will be. Should be 16 times the IMAGE_SIZE.
|
|
SHEET_SIZE = IMAGE_SIZE * 16
|
|
|
|
# Get a list of files in the item directory.
|
|
item_files = os.listdir(ITEM_DIR)
|
|
|
|
# Sort the list of items.
|
|
item_files = sorted(item_files)
|
|
|
|
# Create a new image of size SHEET_SIZE x SHEET_SIZE.
|
|
current_sheet = Image.new("RGBA", (SHEET_SIZE, SHEET_SIZE), (0, 0, 0, 0))
|
|
# Set the current position on the sheet to 0.
|
|
current_pos = 0
|
|
# Create an array to store finished sheets.
|
|
sheets = []
|
|
|
|
# Create an array to hold icon info.
|
|
icon_info = []
|
|
|
|
# Create the SHEET_DIR directory.
|
|
os.makedirs(SHEET_DIR)
|
|
|
|
# Loop over every item and add it to the texture sheet we are currently working on.
|
|
for item_file in item_files:
|
|
# Get the name of the item.
|
|
name = item_file.replace(".png", "")
|
|
|
|
# Load the image from disk.
|
|
image = Image.open(f"{ITEM_DIR}{item_file}")
|
|
|
|
# Calculate our position on the sheet.
|
|
x = current_pos % 16
|
|
y = current_pos // 16
|
|
|
|
# Paste the current item on the sheet.
|
|
current_sheet.paste(im=image, box=(x*16, y * 16))
|
|
|
|
icon_info.append({
|
|
"name": name,
|
|
"sheet": len(sheets),
|
|
"pos": current_pos,
|
|
"description": ["A default minecraft item."]
|
|
})
|
|
|
|
# Move one texture over on the sheet.
|
|
current_pos += 1
|
|
|
|
# Check if the current sheet is full.
|
|
if current_pos == 256:
|
|
# If it is add it to the array of finished sheets.
|
|
sheets.append(current_sheet)
|
|
# And create a new one.
|
|
current_sheet = Image.new("RGBA", (SHEET_SIZE, SHEET_SIZE), (0, 0, 0, 0))
|
|
# Move us back to the start of the current sheet.
|
|
current_pos = 0
|
|
|
|
# Check if the current sheet is partially filled.
|
|
if not current_pos == 0:
|
|
# If it is add it to the finished sheets.
|
|
sheets.append(current_sheet)
|
|
|
|
# Loop over all finished sheets.
|
|
for i in range(len(sheets)):
|
|
sheet = sheets[i]
|
|
# Save the sheet to disk.
|
|
sheet.save(f"{SHEET_DIR}sheet_{i}.png")
|
|
|
|
# Store icon_info into a json file.
|
|
with open("icon_info.json", "w") as icon_info_file:
|
|
json.dump(icon_info, icon_info_file, indent=4)
|