Python拆分atlas图集

在某游戏美术论坛里捡到了些别人分享的Spine动画,发现是Spine3.6生成的,我用的是3.8,用Spine自带的纹理解包器解包出来的部分小图带有莫名其妙的绿色背景,导入软件后就很喜感:

开始还以为这是什么高级的加密手段,但检查了一边发现并不是所有小图都带有背景,也有一部分正常的,再对照atlas中的信息发现所有异常的图像的rotate字段都是true,怀疑是解包算法的问题,把之前的旧的用python解包atlas的代码翻出来重新折腾了一下对rotate为true的图像的处理,可算是切分出正常的小图了


 完整代码:

# -*- 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");

#big_image.show()#调用系统看图器

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();
_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

        print("文件名:"+line1,end="")
        print("是否旋转:"+line2,end="")
        print("坐标:"+line3,end="")
        print("大小:"+line4,end="")
        print("原点:"+line5,end="")
        print("阻挡:"+line6,end="")
        print("索引:"+line7,end="")
        
        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])
        
        if (line2=='  rotate: true\n'):
            rbx = ltx+height
            rby = lty+width
        else:
            rbx = ltx+width
            rby = lty+height
        
        print ("文件名:"+name+" 宽度:"+str(width)+" 高度:"+str(height)+" 起始横坐标:"+str(ltx)+" 起始纵坐标:"+str(lty)+" 结束横坐标:"+str(rbx)+" 结束纵坐标:"+str(rby)+"\n")
        if (line2=='  rotate: true\n'):
            result_image = Image.new("RGBA", (height,width), (0,0,0,0))
            rect_on_big = big_image.crop((ltx,lty,rbx,rby))
            result_image.paste(rect_on_big, (0,0,height,width))
        else:
            result_image = Image.new("RGBA", (width,height), (0,0,0,0))
            rect_on_big = big_image.crop((ltx,lty,rbx,rby))
            result_image.paste(rect_on_big, (0,0,width,height))
        
        name_t=name.replace("/", "_")#字符替换

        if (line2=='  rotate: true\n'):
            result_image = result_image.transpose(Image.ROTATE_270)
        result_image.save(aim_path+'/'+name_t)
atlas.close()
del big_image
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: PythonAtlas图集拆分可以用来将大型的图集文件切分成较小的单个图片文件,以便方便地使用它们在不同的游戏引擎或应用程序中。以下是关于如何使用Python进行Atlas图集拆分。 首先,需要安装Pillow库和xml.etree.ElementTree库,这可以通过在终端中运行“pip install pillow”和“pip install xml.etree.ElementTree”来完成。这两个库都是Python图像处理和XML解析的标准库。 接下来,需要准备Atlas图集,并将其保存为XML格式。我们可以使用一些图集编辑器(如TexturePacker)来创建Atlas图集,并导出为XML格式。 在Python脚本中,可以使用xml.etree.ElementTree库来解析XML文件,然后提取每个纹理的位置和大小。然后,可以使用Pillow库来裁剪图像数据,并将其保存到单独的输出文件中。 最后,将所有的单独的图像合并成一个Atlas图集,以便在应用程序中使用。可以使用TexturePacker等工具来执行此操作,也可以使用代码来实现。 总之,Python Atlas图集拆分是一个很有用的工具,可以简化图像管理和优化应用程序性能。通过使用Pillow和xml.etree.ElementTree库,可以实现这个功能,并获得更好的控制和灵活性。 ### 回答2: Python Atlas图集拆分通常是针对游戏引擎和其他需要大量图像资源的应用程序进行的,它将大型图像文件分解为小图像块,以便在需要时加载和使用图像资源。 要使用Python拆分图集,我们可以使用Pillow库或OpenCV库等图像处理库来实现。我们首先需要将含有所有图像的大型图像文件加载到Python中。然后,我们可以使用库中可用的裁剪函数来划分图像块。我们需要提供裁剪参数,例如每个块的大小,每个块之间的间隔,以及需要裁剪的图像的位置。然后将块保存到单独的文件中,以便我们可以随时在程序中读取和使用它们。 我们还可以使用Python脚本来自动化此过程,以便同时处理多个图像文件。我们可以编写一个Python脚本来迭代处理文件夹中的所有图像文件,并将它们拆分为块。这样可以节省时间和精力,并使我们能够快速创建大量的图像资源。 在实际应用中,我们通常需要执行额外的处理步骤,例如为拆分的图像块打标记和元数据或重新整理图像文件的名称和路径。这些都可以通过Python脚本和其他库来实现。 总之,Python Atlas图集拆分是一种方便快捷的方式来处理大量图像资源。它可以帮助增加程序的性能,减少加载时间,并提高用户体验。 ### 回答3: Atlas图集(也称为纹理图集)是一种将多个小型纹理合并成单个大型纹理的技术。这种技术可以显著减少内存使用量,因此成为许多游戏和应用程序的常见技术。 在Python中,有许多库可以帮助我们拆分Atlas图集。其中一种流行的库是Pygame,在Pygame中,我们可以使用Surface.subsurface(rect)方法从Atlas图集中提取小型纹理。 此外,还有一些第三方库可用于Atlas图集拆分,例如Pillow和OpenCV。这些库提供了更多的功能和配置选项,使我们可以更轻松地进行Atlas图集拆分。 在使用这些库拆分Atlas图集时,我们需要先找到Atlas图集中各个小型纹理的矩形区域。这可以通过阅读Atlas图集中的元数据文件来完成,或者使用图像处理算法来寻找区域。一旦我们找到了这些区域,就可以使用所选的库从Atlas图集中提取小型纹理,并将它们保存到单独的图像文件中以供使用。 总体而言,Atlas图集拆分是一项重要的任务,它可以帮助我们提高游戏和应用程序的性能和内存使用。使用Python和适当的库,我们可以轻松地进行Atlas图集拆分,并从中获得许多好处。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值