63 lines
1.8 KiB
Python
63 lines
1.8 KiB
Python
|
#!/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:])
|