最近玩个Unity开发的游戏,手又痒了拆开看了看
想把atlas图集拆开,先用的unity切割图集并且读取图集的方法,发现有些小图切割的不对
重新找了个配合atlas文件的:解析atlas文件
不过代码是python2的,把格式改成了python3能用
# -*- coding: utf-8 -*-
import os
import sys
import os.path
import shutil
from PIL import Image
fileName = input('输入要解析的文件名:')
if fileName.find('.png') != -1:
fileName = fileName[:-4]
pngName = fileName + '.png'
atlasName = fileName + '.atlas'
print(pngName,atlasName)
big_image = Image.open(pngName)
atlas = open(atlasName, encoding="utf8");
curPath = os.getcwd()# 当前路径
aim_path = os.path.join(curPath, fileName)
print (aim_path)
if os.path.isdir(aim_path):
shutil.rmtree(aim_path,True)#如果有该目录,删除
os.makedirs(aim_path)
#
_line = atlas.readline();
_line = atlas.readline();
_line = atlas.readline();
_line = atlas.readline();
while True:
line1 = atlas.readline() # name
if len(line1) == 0:
break
else:
line2 = atlas.readline() # rotate
line3 = atlas.readline() # xy
line4 = atlas.readline() # size
line5 = atlas.readline() # orig
line6 = atlas.readline() # offset
line7 = atlas.readline() # index
"""
atlas文件里的格式不一样,第一遍最好还是都打印出来检查一下有没有对错行
print("line1:"+line1)
print("line2:"+line2)
print("line3:"+line3)
print("line4:"+line4)
print("line5:"+line5)
print("line6:"+line6)
print("line7:"+line7)
"""
name = line1.replace("\n","") + ".png";
args = line4.split(":")[1].split(",");
width = int(args[0])
height= int(args[1])
args = line3.split(":")[1].split(",");
ltx = int(args[0])
lty = int(args[1])
rbx = ltx+width
rby = lty+height
print (name,width,height,ltx,lty,rbx,rby)
result_image = Image.new("RGBA", (width,height), (0,0,0,0))
rect_on_big = big_image.crop((ltx,lty,rbx,rby))
print(rect_on_big)
result_image.paste(rect_on_big, (0,0,width,height))
name_t=name.replace("/", "_")#字符替换
result_image.save(aim_path+'/'+name_t)
atlas.close()
del big_image
测试的atlas文件里开头多了两行不明参数,导致疯狂报错,后面干脆把读取到的每行都打印出来,发现是读错行了