Asset prog
This commit is contained in:
64
tools/assetstool/processimage.py
Normal file
64
tools/assetstool/processimage.py
Normal file
@@ -0,0 +1,64 @@
|
||||
import os
|
||||
from args import args
|
||||
from PIL import Image
|
||||
|
||||
def extractPaletteFromImage(image):
|
||||
# goes through and finds all unique colors in the image
|
||||
if image.mode != 'RGBA':
|
||||
image = image.convert('RGBA')
|
||||
pixels = list(image.getdata())
|
||||
uniqueColors = []
|
||||
for color in pixels:
|
||||
if color not in uniqueColors:
|
||||
uniqueColors.append(color)
|
||||
return uniqueColors
|
||||
|
||||
def savePalette(pixels, outputFilePath):
|
||||
# Pixels is a list of (R, G, B, A) tuples
|
||||
data = "DPF" # Header for Dusk Palette Format
|
||||
|
||||
# Count of colors (int32_t)
|
||||
colorCount = len(pixels)
|
||||
data += colorCount.to_bytes(4, byteorder='little').decode('latin1')
|
||||
|
||||
for r, g, b, a in pixels:
|
||||
data += bytes([r, g, b, a]).decode('latin1')
|
||||
|
||||
os.makedirs(os.path.dirname(outputFilePath), exist_ok=True)
|
||||
with open(outputFilePath, 'wb') as f:
|
||||
f.write(data.encode('latin1'))
|
||||
|
||||
def processPalette(assetPath):
|
||||
# Process the image file
|
||||
print(f"Processing palette: {assetPath}")
|
||||
|
||||
# Load the image
|
||||
image = Image.open(assetPath)
|
||||
pixels = extractPaletteFromImage(image)
|
||||
|
||||
# Save the processed image to the output directory
|
||||
fileNameWithoutExt = os.path.splitext(os.path.basename(assetPath))[0]
|
||||
outputFilePath = os.path.join(args.output_assets, f"{fileNameWithoutExt}.dpf")
|
||||
os.makedirs(os.path.dirname(outputFilePath), exist_ok=True)
|
||||
savePalette(pixels, outputFilePath)
|
||||
|
||||
outputRelative = os.path.relpath(outputFilePath, args.output_assets)
|
||||
|
||||
return {
|
||||
"outputFile": outputRelative,
|
||||
"paletteColors": len(pixels),
|
||||
"files": [ outputFilePath ]
|
||||
}
|
||||
|
||||
def processImage(assetPath):
|
||||
print(f"Processing image: {assetPath}")
|
||||
|
||||
# Load the image
|
||||
image = Image.open(assetPath)
|
||||
pixels = extractPaletteFromImage(image)
|
||||
|
||||
return {
|
||||
# "outputFile": os.path.relpath(assetPath, args.input_assets),
|
||||
# "paletteColors": len(pixels),
|
||||
"files": [ assetPath ]
|
||||
}
|
Reference in New Issue
Block a user