美文网首页
[python] 分解plist图片

[python] 分解plist图片

作者: 计西 | 来源:发表于2019-06-21 16:55 被阅读0次

注意: 本文分解方法需要使用python.

分解前准备:

1)安装python及对应版本PIL(笔者安装的是2.7)
2)创建以下脚本,脚本命名为unpack_plist.py
3)将对应的fileName.png和fileName.plist文件放在同一文件夹下

分解方式:

1)在命令行中移动到plist所在路径下
2)执行 python unpack_plist.py fileName

分解后:

在plist同级目录下会生成一个跟plist同名的文件夹 ,里面是分解之后的碎图

  • 分解结束 -

脚本来源自网络,因为不明作者就没有注明

以下为脚本全文:

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

无关分解:
关于print的写法:print outfile, "generated"这种写法貌似在python3以上被弃用了,不兼容,需改为print(outfile, "generated")

相关文章

  • [python] 分解plist图片

    注意: 本文分解方法需要使用python. 分解前准备: 1)安装python及对应版本PIL(笔者安装的是2.7...

  • Python:将GIF动图分成单帧图片

    Python:将GIF图片分解为多张图片 准备工作准备一张GIF图片 安装 Python3 安装 PIL Pyth...

  • Plist存图片

    把图片转为base64的字符串存到数据库中或者plist文件中,然后用到的时候再取出来 //获取沙盒路径, NSS...

  • python numpy svd

    Python numpy svd分解问题 奇异值分解(svd)是线性代数中一种重要的矩阵分解在Python的num...

  • 67. Python基础-数学库(2)

    例子:奇异值分解SVD 读取图片,选取前若干值进行展示。任何一个图片都可以看做一个矩阵 安装解释器、Python包...

  • 读取plist 文件,转换成模型

    我是在项目中直接创建的plist文件,用于存储 图片和文字.格式如下: plist 文件格式如下: 读取plist...

  • 第02天OC语言(13):修改项目模板

    二、code 图片分解 二、code 图片分解一、修改commandLineTool 二、修改描述头文件 修不了信...

  • 自定义NSOperation实现多图片下载

    界面效果图 plist文件 文字及图片的地址从plist文件中进行读取,plist文件如下图所示: 实现思路流程图...

  • Swift基础--视频按帧分解成图片

    参考:iOS开发视频分解成图片(OC版) 调用视频分解Function 视频分解Function 使用 Demo下载

  • 63. 爬取图像与ffmpeg视频分解

    爬取图片 保存图片如下: ffmpeg视频分解: ffmpeg处理视频音频的软件, opencv分解视频中实际上就...

网友评论

      本文标题:[python] 分解plist图片

      本文链接:https://www.haomeiwen.com/subject/anhuqctx.html