python 拆分plist png

python 需要安装 PIL库

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

对应版本

#!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"  

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

时间: 2024-10-21 21:43:46

python 拆分plist png的相关文章

【制作表情包】Python拆分和合并GIF动态图(几行代码就搞定)

“表情包”是当前社交软件上不可或缺的交流方式,难以用文字表达的意思,发一个“表情包”,对方就能心领神会.下面是小派制作的一个表情包,准确地讲,是在已有表情包的基础上,二次加工而成的. 下面以最简单的代码形式(10行左右),介绍上述“表情包”的制作过程.第一,将GIF动态图拆分成图形帧.下图是网络上找到的一个GIF格式动态图. 利用Python将上述GIF格式动态图拆分图形帧,只需要输入以下代码.其中第1-2行是导入os库.从PIL库中导入Image函数功能.第3行是Image.open打开位于D

python拆分CANLog

通过CANOE 导出的log通常有很多个ID的数据,如何才能找到某一个ID下的特殊的信号?利用python可以简单的进行这个步骤,代码如下: 说明: 最终的效果是将log信息,分不同的ID进行拆分,并单独生成文件log_id.csv的文件夹. 1. 需要输入输入文件夹 2. 生成_out文件夹. 3. 没有错误处理 4. 采用"[A-F|\d]{3}"匹配CAN ID 1 #log analy about CAN Signal for CANOE 2 import os 3 impor

python拆分整型字符串并转为整型list

python正则表达式模块,拆分字符串, re.split()eg:s = '1, 2, 3, 4' 拆分组成数字list:strs = re.split(', ', s); print(strs); 结果:['1', '2', '3', '4'] 转成int行list:strs = list(map(int, strs)); print(strs); 结果:[1, 2, 3, 4] 如果strs中有多个分隔符, 模式串中间应用“|”分隔 各个分隔字符(或分隔字符串):eg:strs = '[1

python 拆分字符串(3.0)

拆分字符串 1. def my_split(s, ds): l = [s] for d in ds: res = [] list(map(lambda x: res.extend(x.split(d)), l)) l = res return l s = 'abc;dwwewfe;rqger|gert;klg\tjotrg\tpa|s;dooo' ds = ';\t|' l = my_split(s, ds) print(l) output: ['abc', 'dwwewfe', 'rqger'

Python拆分大型CSV文件(亲测拆分178G)注释超全

程序 1 #!/usr/bin/env python3 2 # -*- coding:utf-8 -*- 4 # @FileName :Test.py 5 # @Software PyCharm 6 7 import os 8 import pandas as pd 9 10 # filename为文件路径,file_num为拆分后的文件行数 11 # 根据是否有表头执行不同程序,默认有表头的 12 def Data_split(filename,file_num,header=True): 1

Reveal分析IOS界面,plist文件读取

Reveal分析IOS界面,需要得到app的 softwareVersionBundleId上传到iphone中 , 而IOS8的iTunesMetadata.plist 去Downloads里面查找很费劲 ,所以写了个辅助脚本,一次性全部读取出来 主要使用python,实现遍历文件夹获取文件列表,然后读取字段,输出成文件libReveal.plist格式 python读取plist文件的库 来自https://github.com/wooster/biplist/ 1 path = '/Use

使用python进行re拆分网页内容

这里简短的总结一下而不是完全的罗列python的re模块,python的re具有强大的功能,如下是一个从我们学校抓取数据然后拆分的程序,代码如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 import httplib import urllib import re import sys reload(sys) sys.setdefaultencoding("u

Python requests 自动登录某财BBS,自动签到打卡领铜钱,最后再配个plist,每天自动执行

某财的用户应该都知道这个网站,在"签到有礼"版块,每天会有一贴,用帖子中给出的关键字回帖,得铜钱,据说铜钱可以换现金,还可以换书. 真好,裸辞在家的失业人员最需要这个-每天领之. 基本思路: 先用抓包工具仔细分析下登陆以及回帖时post了哪些数据,这些数据从何而来(我用的Firefox + Firebug,挺好用的,选上保持+全部,就算页面重定向,所有的请求也都能看到): python requests库,用requests.Session().post来登陆和回帖,用get来读取页面

Python 之 sklearn 交叉验证 数据拆分

本文K折验证拟采用的是 Python 中 sklearn 包中的 StratifiedKFold 方法. 方法思想详见:http://scikit-learn.org/stable/modules/cross_validation.html StratifiedKFold is a variation of k-fold which returns stratified folds: each set contains approximately the same percentage of s