将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
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
相关文章推荐
- Android内存分析和调优(上)
- 关于程序可伸缩性问题的讨论
- 使用 ipmitool 实现远程管理Dell 系列服务器
- 在OPENSTACK中 WIN7和WIN2008 R2实例启动时蓝屏报 STOP:0X0000005DT
- JAVA_SE基础——21.二维数组的定义
- Android开发者必备的42个链接
- CoreData 的使用 ---转载
- 白话REST-识别真假REST
- POJ 2135 Farm Tour【最小费用流】
- ORACLE删除用户的所有表
- HDU-5284-wyh2000 and a string problem(BestCoder Round #48 ($))
- UG集成显卡 显示成烂面
- ajax怎么请求webserver的某个方法返回string
- 最小堆min_stack
- Drbd+nfs+heartbeat 简要总结
- OC内存管理
- 【分享】iTOP4412开发板-Bluetooth移植文档
- Matlab 层次分析法 求解权重矩阵
- 搭建SpringMVC学习笔记(一)
- 股权期权