拆分atlas图像

最近玩个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文件里开头多了两行不明参数,导致疯狂报错,后面干脆把读取到的每行都打印出来,发现是读错行了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答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图集拆分,并从中获得许多好处。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值