您的位置:首页 > 其它

将Texture Packer制作的.pvr.ccz和.plist文件还原为多个原图

2015-07-20 13:33 477 查看
1、准备

1、安装 TexturePacker

2、安装python

3、安装Pillow-2.1.0.win-amd64-py2.7.exe 其他下载https://pypi.python.org/simple/pillow/

2、PVR转PNG.bat的使用

把 xx.plist和xx.pvr.ccz 文件放在工具目录下,直接双击“PVR转PNG.bat”

批处理文件,如果成功的话,在当前目录下就会生成相应的.png文件,这个批处理

可同时转化很多对(xx.plist和xx.pvr.ccz)文件,当然,也有可能失败,

如果失败,我们可以使用另一种方式转化,直接使用TexturePacker工具。

3、使用TexturePacker工具把xx.plist和xx.pvr.ccz转化为.png

1. TexturePacker中有个PVR Viewer工具,我们可以直接使用这个工具

进行转化。

2. 使用PVR Viewer工具打开我们要转化的文件,然后点击File下的Save As,

保存为.png文件即可,保存时把文件的后缀名添加上.png即可。

4、使用split.py脚本 - 将Texture Packer制作的.pvr.ccz和.plist文件还原为多个原图

1. split.py脚本只能通过.png和.plist文件还原,而不能直接通过.pvr.ccz和.plist文件,

所以需要根据2和3中的方法把xx.plist和xx.pvr.ccz转化为.png

2. 在Dos命令行模式下,进入脚本存放目录,同时需要把.png和.plist文件也放在这个

目录下,而且要确保.png和.plist文件的文件名相同(例:mm.png和mm.plist),

然后执行split.py脚本,传入参数(例:上面的mm),然后执行即可。

3. 当然也有可能不成功,因为split.py脚本是通过分析.plist文件,然后对

.png文件进行切割,保存,如果失败,可以检查一下.plist文件是否正确。

split.py脚本

把所有需要转化的.pvr.ccz和.plist文件放到和脚本相同目录下,点击脚本运行即可。

[python] view
plaincopy

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

参考:http://www.haodaima.net/art/2682730

原文出处:http://blog.csdn.net/tianxiawuzhei/article/details/44923703
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: