原文地址:http://blog.csdn.net/linuxchen/article/details/16865645python
想把plist再進一步合併,須要先分解再合在一塊兒,找到這篇文章,不錯linux
Python 腳本:(來自網絡)windows
unpack_plist.py網絡
命令行: python unpack_plist.py plist文件名稱 python2.7
例子: python unpack_plist.py common ## plist文件全名爲 common.plistspa
-
- import os,sys
- from xml.etree import ElementTree
- from PIL import Image
-
- 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():
- rectlist = to_list(v['frame'])
- width = int( rectlist[3] if v['rotated'] else rectlist[2] )
- height = int( rectlist[2] if v['rotated'] else rectlist[3] )
- box=(
- int(rectlist[0]),
- int(rectlist[1]),
- int(rectlist[0]) + width,
- int(rectlist[1]) + height,
- )
- sizelist = [ int(x) for x in to_list(v['sourceSize'])]
- rect_on_big = big_image.crop(box)
-
- if v['rotated']:
- rect_on_big = rect_on_big.rotate(90)
-
- result_image = Image.new('RGBA', sizelist, (0,0,0,0))
- if v['rotated']:
- result_box=(
- ( sizelist[0] - height )/2,
- ( sizelist[1] - width )/2,
- ( sizelist[0] + height )/2,
- ( sizelist[1] + width )/2
- )
- else:
- result_box=(
- ( sizelist[0] - width )/2,
- ( sizelist[1] - height )/2,
- ( sizelist[0] + width )/2,
- ( sizelist[1] + height )/2
- )
- result_image.paste(rect_on_big, result_box, mask=0)
-
- if not os.path.isdir(file_path):
- os.mkdir(file_path)
- outfile = (file_path+'/' + k).replace('gift_', '')
- print outfile, "generated"
- result_image.save(outfile)
-
- 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"
windows7 下相關python配置:.net
1. 安裝python2.7.3命令行
2. 在此處下載 安裝 (這是最簡潔的方式,已經編譯好png,zip等處理) code
http://www.lfd.uci.edu/~gohlke/pythonlibs/#pilxml