|
@ -0,0 +1,62 @@ |
|
|
|
|
|
#!/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:]) |