sneak/tools/assets/import_ccg.py

63 lines
1.8 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
import glob
import os
import pprint # pylint: disable=unused-import
import sys
from PIL import Image
TRANSPARENT_RGBA = (255, 255, 255, 0)
def main(args):
if len(args) < 2:
print('usage: python3 import_ccg.py CCG_ROOT Sprite_Name\n')
print('Add an additional OUTPUT_ROOT argument to actually write output.')
print('(Otherwise, this script just will perform a dry run.)')
return
ccg_root, sprite_name = args[:2]
os.chdir(ccg_root)
output_root = None
if len(args) > 2:
output_root = os.path.join(os.path.expanduser(args[2]), sprite_name)
os.makedirs(output_root, exist_ok=True)
sprite_files = sorted(glob.glob(sprite_name + '/*.png'))
print('sprites: %d' % (len(sprite_files)))
if not sprite_files:
print('no sprite files found!')
return
# Collect sizes.
max_width = 0
max_height = 0
for sprite in sprite_files:
with Image.open(sprite) as image:
max_width = max(max_width, image.width)
max_height = max(max_height, image.height)
new_size = (max_width, max_height)
print('new size: %dx%d' % new_size)
# Now frob them.
for i, sprite in enumerate(sprite_files):
with Image.open(sprite) as image:
top_pad = max_height - image.height
left_pad = (max_width - image.width) // 2
right_pad = max_width - image.width - left_pad
out_filename = '%s_%03d.png' % (sprite_name, i)
print('%03d: %3dx%-3d top: %2d left: %2d right: %2d %s -> %s' % (
i, image.width, image.height, top_pad, left_pad, right_pad, sprite,
out_filename))
if output_root:
new_image = Image.new('RGBA', new_size, TRANSPARENT_RGBA)
new_image.paste(image, (left_pad, top_pad))
new_image.save(os.path.join(output_root, out_filename))
if __name__ == '__main__':
main(sys.argv[1:])