python 拆分plist png

原地址: https://www.cnblogs.com/liujiang04/p/9771760.html

python 拆分plist png

python 需要安装 PIL库

http://www.pythonware.com/products/pil/

对应版本

// mac 安装 PIL库
sudo pip install Pillow

#!python   
import os,sys  
from xml.etree import ElementTree  
from PIL import Image  
  
def endWith(s,*endstring):   
    array = map(s.endswith,endstring)   
    if True in array:   
        return True   
    else:   
        return False   
      
# Get the all files & directories in the specified directory (path).   
def get_recursive_file_list(path):   
    current_files = os.listdir(path)   
    all_files = []   
    for file_name in current_files:   
        full_file_name = os.path.join(path, file_name)  
        if endWith(full_file_name,'.plist'):   
            full_file_name = full_file_name.replace('.plist','')  
            all_files.append(full_file_name)   
   
        if os.path.isdir(full_file_name):   
            next_level_files = get_recursive_file_list(full_file_name)   
            all_files.extend(next_level_files)  
    return all_files  
      
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_', '')  
        #outfile = outfile + '.png'  
        print outfile, "generated"  
        result_image.save(outfile)  
  
if __name__ == '__main__':  
    currtenPath = os.getcwd()   
    allPlistArray = get_recursive_file_list(currtenPath)  
    for plist in allPlistArray:  
        filename = plist  
        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"
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    小迈克阅读 3,061评论 1 3
  • # Awesome Python [![Awesome](https://cdn.rawgit.com/sindr...
    emily_007阅读 2,227评论 0 3
  • 1-------- 走进前端 2-------- jQuery 3-------- CSS 4-------- A...
    依依玖玥阅读 2,360评论 0 34
  • 是否,冥冥之中,我们早已拥有奇妙的缘? 是否,久远曾经,我们彼此早已美好约定? 不然为何,我们一到九华山,见到亲爱...
    阳光Sunflower阅读 4,347评论 12 13
  • Redis 入门 一.Redis简介 Redis(http://redis.io)是一款开源的、高性能的键-值存储...
    hz_mumu阅读 899评论 2 51