#!/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:])