求助:如何将Adobe Animate导出的Texture Atlas转换为图片
将Texture Atlas(精灵图集)拆分单张图片的Python方案
第一步:解析spritemap1.json提取子图信息
精灵图集的JSON文件核心是记录每个子图的位置、尺寸和名称,先读取并解析这个文件:
import json from PIL import Image # 读取图集元数据 with open('spritemap1.json', 'r', encoding='utf-8') as f: sprite_data = json.load(f) # 打开原图集图片 atlas_img = Image.open('spritemap1.png')
第二步:批量裁剪并保存子图
不用复杂的粘贴操作,直接用Pillow的crop()方法裁剪对应区域即可,这是最直接的方式:
# 多数图集工具导出的子图数据会存在'frames'键下,若结构不同可打印sprite_data确认层级 for sprite_name, sprite_info in sprite_data['frames'].items(): # 提取子图坐标与尺寸,部分JSON会把这些数据放在'frame'子字典里 frame = sprite_info.get('frame', sprite_info) x, y = frame['x'], frame['y'] w, h = frame['width'], frame['height'] # 裁剪区域格式:(左边界, 上边界, 右边界, 下边界) cropped_img = atlas_img.crop((x, y, x + w, y + h)) # 以子图名称为文件名保存 cropped_img.save(f'{sprite_name}.png')
关于Animation.json的处理
如果这个文件是动画序列配置,里面通常会记录动画对应的子图名称、播放顺序、时长等信息。先打印它的结构来明确数据层级:
with open('Animation.json', 'r', encoding='utf-8') as f: anim_data = json.load(f) print(json.dumps(anim_data, indent=2))
根据输出的结构,比如若某个动画的帧列表存在animations['walk']['frames']下,就可以提取对应的子图名称,再从已裁剪好的图片里按顺序整理成动画(比如用imageio生成GIF)。
常见问题排查
- 若JSON结构和示例不符,先打印
sprite_data确认子图数据所在的键名(比如部分工具会用textures代替frames)。 - 确认坐标是基于图集左上角的绝对位置,这是绝大多数图集工具的标准输出逻辑。
内容的提问来源于stack exchange,提问作者bpforest
相关产品推荐
相关产品推荐

