Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python3
- # -*- coding: utf-8 -*-
- import os,sys
- from xml.etree import ElementTree
- from PIL import Image
- import logging
- DEBUG = False
- # 设置默认的level为DEBUG
- # 设置log的格式
- logging.basicConfig(
- level=logging.INFO if DEBUG else logging.ERROR,
- format="[%(asctime)s] %(name)s:%(levelname)s: %(message)s"
- )
- def tree_to_dict(tree):
- d = {}
- for index, item in enumerate(tree):
- if item.tag == 'key':
- if tree[index+1].tag == 'string':
- d[item.text] = tree[index + 1].text
- elif tree[index + 1].tag == 'true':
- d[item.text] = True
- elif tree[index + 1].tag == 'false':
- d[item.text] = False
- elif tree[index+1].tag == 'dict':
- d[item.text] = tree_to_dict(tree[index+1])
- return d
- def gen_png_from_plist(plist_filename, png_filename):
- file_path = plist_filename.replace('.plist', '')
- big_image = Image.open(png_filename)
- root = ElementTree.fromstring(open(plist_filename, 'r').read())
- plist_dict = tree_to_dict(root[0])
- to_list = lambda x: x.replace('{','').replace('}','').split(',')
- for k,v in plist_dict['frames'].items():
- if(DEBUG and k != "coin_4_p.png"):
- continue
- logging.info(v)
- rectlist = to_list(v['frame'])
- logging.info("rectlist: %s" % rectlist)
- width = int( rectlist[3] if v['rotated'] else rectlist[2] )
- height = int( rectlist[2] if v['rotated'] else rectlist[3] )
- logging.info("( %s , %s )" % (width, height))
- offset = [ abs(int(x)) for x in to_list(v['offset'])]
- logging.info("offset : %s -> %s " % (v['offset'], offset))
- sizelist = [ int(x) for x in to_list(v['sourceSize'])]
- logging.info("size: %s"% sizelist)
- logging.info("rotated: %s" % v['rotated'])
- box=(
- int(rectlist[0]),
- int(rectlist[1]),
- int(rectlist[0]) + width,
- int(rectlist[1]) + height,
- )
- rect_on_big = big_image.crop(box)
- logging.info(rect_on_big)
- if(DEBUG):
- result_image1 = Image.new('RGBA', [width, height], (0,0,0,0))
- result_image1.paste(rect_on_big, (0, 0, width, height))
- result_image = Image.new('RGBA', sizelist, (0,0,0,0))
- if v['rotated']:
- rect_on_big = rect_on_big.rotate(90,expand=1)
- parse_pos=(
- int((sizelist[0] - height)/2),
- int((sizelist[1] - width) /2)
- )
- else:
- parse_pos=(
- int((sizelist[1] - height)/2),
- int((sizelist[0] - width) /2)
- )
- logging.info(parse_pos)
- logging.info(rect_on_big)
- result_image.paste(rect_on_big, parse_pos)
- if not os.path.isdir(file_path):
- os.mkdir(file_path)
- outfile = (file_path+'/' + k).replace('gift_', '')
- print(outfile, "generated")
- outpath = file_path +'/'+ outfile.split('/')[-1]
- print(outpath,"split")
- result_image.save(outpath)
- if(DEBUG):
- outpath1 = file_path +'/org_'+ outfile.split('/')[-1]
- print(outpath1,"split")
- result_image1.save(outpath1)
- if __name__ == '__main__':
- filename = sys.argv[1]
- plist_filename = filename + '.plist'
- png_filename = filename + '.png'
- if (os.path.exists(plist_filename) and os.path.exists(png_filename)):
- gen_png_from_plist( plist_filename, png_filename )
- else:
- print("make sure you have boith plist and png files in the same directory")
Add Comment
Please, Sign In to add comment