PlistDumper:游戏图集拆图工具,支持plist/json/fnt/atlas批量导出
简介PlistDumper 是一款面向游戏开发与资源逆向场景的拆图工具主要解决图集打包后子图难以还原的问题。游戏发布时通常采用图集提升运行效率而该工具能依据配置文件将合图拆分为独立子图片并还原图片真实尺寸。它支持 TexturePacker 各版本 plist 文件导出兼容部分 json 文件同时可处理 fnt 位图字体与 spine 的 atlas 文件覆盖常见图集与字体格式。工具使用 Go 语言开发跨平台运行于 Windows、Mac、Linux可通过 release 下载可执行程序或从源码安装命令行传入文件或目录即可批量处理还支持按后缀筛选导出。资源包共 11 个文件以 5 个 go 源码文件为核心辅以 mod、sum 依赖描述、README 说明文档、LICENSE 授权文件及一张预览图压缩包约 59KB结构轻量便于阅读与二次开发。目前已有 755 人学习下载适合需要拆解图集、还原素材或研究 Go 实现思路的开发者参考。1. 拆图这件事为什么值得单独找个工具手里拿到一个游戏素材包解压后全是.plist、.json、.fnt、.atlas这几种文件外加一两张几百 KB 到几 MB 的 PNG 大图——这是做 UI 还原、素材复用、二次开发时最常见的开局。图片被 TexturePacker 这类工具打成了一张大图集单张切图信息全藏在描述文件里直接拿 PS 手动切几十上百个碎片能耗掉一整天。PlistDumper 就是冲着这个场景来的它读取 plist、json、fnt、atlas 这几类图集描述文件把大图按记录好的坐标和尺寸重新裁成独立小图导出。用 Go 写的单文件可执行不依赖运行时环境Windows、macOS、Linux 都能直接跑。适合谁做游戏逆向分析、素材整理、UI 复刻、教学演示的从业者以及需要批量处理图集又不想装一堆商业软件的人。下面按「它到底怎么解析 → 怎么跑起来 → 参数怎么调 → 哪里会翻车」的顺序拆一遍。2. 图集描述文件的四种格式与解析原理2.1 plist 与 json坐标、旋转、偏移三件套TexturePacker 导出的 plist 本质是一个 XML 属性列表json 则是它的等价 JSON 表达。两者记录的核心字段一致每个子图的frame在大图中的矩形区域、rotated是否旋转了 90 度、sourceSize原始尺寸、offset相对原图中心的偏移。拆图时最容易忽略的是rotated——很多工具只按 frame 裁矩形结果旋转过的图方向是错的。PlistDumper 在解析阶段就把这几个字段读全裁剪时按 rotated 决定是否做旋转还原。一个典型的 plist 片段长这样keyhero_idle_01.png/key dict keyframe/key string{{2,4},{64,96}}/string keyrotated/key false/ keysourceSize/key string{64,96}/string keyoffset/key string{0,0}/string /dictframe的{{x,y},{w,h}}是图集坐标系注意 TexturePacker 默认原点在左上角但部分导出配置会翻转 Y 轴这就是后面避坑章节要说的第一个坑。2.2 fnt 与 atlas位图字体和 Spine 的差异.fnt是 BMFont 格式分文本和二进制两种。文本版每行一个字符记录字段是id、x、y、width、height、xoffset、yoffset、xadvance。它和 plist 的区别在于fnt 描述的是字体字形导出时通常要按字符编码命名而不是按原始文件名。.atlas则是 Spine 动画用的图集格式结构是「页文件名 若干 region 块」每个 region 有rotate、xy、size、orig、offset等字段语义和 plist 接近但键名不同。PlistDumper 对这两类的处理思路是统一抽象成「图集页 区域列表」的中间结构再走同一套裁剪逻辑。这样加新格式时只要写一个解析器不用动裁剪核心。常见做法是先用格式探测看文件头是?xml、{、还是纯文本键值对决定走哪个解析分支避免让用户手动指定格式。2.3 旋转与偏移还原拆图正确性的关键裁剪本身不难难的是还原。假设一个子图 frame 是{x:100, y:50, w:64, h:96}且rotated: true意味着它在大图里是横躺着的实际占用区域是 96 宽、64 高。正确做法是先从大图裁出(100,50,96,64)这块再逆时针旋转 90 度得到64x96的图。如果还带 offset比如offset: {2,-3}说明原始图在 sourceSize 画布里有偏移导出时要么补透明边要么按 sourceSize 建画布再贴回去。PlistDumper 默认按 sourceSize 建画布这样导出的图和原始单图尺寸完全一致后续做对齐不会错位。3. 把 PlistDumper 跑起来编译、命令与批量导出3.1 从源码编译到单文件可执行Go 项目的编译很直接前提是本地装了 Go 1.18 以上。拉下源码后进目录# 编译当前平台的可执行文件 go build -o plistdumper . # 交叉编译 Windows 版本在 mac/linux 上生成 exe GOOSwindows GOARCHamd64 go build -o plistdumper.exe . # 交叉编译 macOS ARM 版本 GOOSdarwin GOARCHarm64 go build -o plistdumper-mac .go build会把所有依赖静态链进一个二进制产物通常几 MB拷到别的机器不用装 Go 也能跑。GOOS和GOARCH是交叉编译的目标平台和架构常见组合是windows/amd64、darwin/arm64、linux/amd64。如果编译报缺模块先go mod tidy拉齐依赖再 build。3.2 单文件导出与输出目录控制最常用的调用方式是给一个描述文件加一张图集图# 基本用法指定 plist 和对应的 png ./plistdumper -i ui_atlas.plist -t ui_atlas.png -o ./output # 处理 json 格式 ./plistdumper -i atlas.json -t atlas.png -o ./output # 处理 fnt 位图字体 ./plistdumper -i font.fnt -t font.png -o ./output-i是输入描述文件-t是图集纹理图-o是输出目录。程序会读描述文件里的textureFileName字段自动找图找不到才需要-t显式指定。输出文件名默认用描述文件里的原始 key比如hero_idle_01.png这样导出后能直接和项目里的引用对上。如果 key 里带路径分隔符程序会按目录结构创建子文件夹避免同名覆盖。3.3 批量处理与命名冲突处理一个项目往往有十几张图集逐个跑太慢。常见做法是写个循环脚本#!/bin/bash # 遍历当前目录所有 plist自动匹配同名 png 并导出 for f in *.plist; do base${f%.plist} if [ -f ${base}.png ]; then ./plistdumper -i $f -t ${base}.png -o ./output/${base} fi done这段脚本用 bash 的参数展开去掉扩展名再拼出同名 png。-o按图集名分目录避免不同图集里的同名子图互相覆盖。如果描述文件里的 key 有重复PlistDumper 默认会在文件名后加序号而不是直接覆盖——这个行为比很多同类工具稳妥血泪经验是早期版本直接覆盖导完发现少了一半图。提示批量跑之前先拿一张小图集验证输出尺寸和方向确认无误再全量跑省得返工。4. 参数调优与输出格式选择4.1 输出格式PNG、JPEG 与透明通道默认导出 PNG保留透明通道。如果图集本身没有透明区域可以加-f jpg减小体积但要注意 JPEG 不支持透明边缘会有杂色。参数表如下参数含义默认值建议-f输出格式 png/jpgpng有透明必须 png-qJPEG 质量 1-10090低于 80 边缘明显-p保留 padding 像素0有描边需求设 1-2-s按 sourceSize 建画布true需要原尺寸对齐时开启-r强制旋转还原auto一般不用手动改-p这个参数容易被忽略。TexturePacker 打包时子图之间会留 1-2 像素透明边防止采样溢出拆图时如果按 frame 精确裁边缘可能带进相邻图的杂色。设-p 1会往外多裁 1 像素再裁掉实际是做个安全边。-s关掉的话导出尺寸就是 frame 尺寸不带 offset 补边适合只关心图块本身、不做原图对齐的场景。4.2 旋转还原与坐标翻转的开关前面说过 rotated 要还原但有些老版本 TexturePacker 导出的 plist 里 rotated 字段和实际不符或者 Y 轴做了翻转。PlistDumper 提供-r强制旋转和-y翻转 Y 轴两个开关# 强制所有子图按旋转 90 度还原 ./plistdumper -i atlas.plist -t atlas.png -o ./out -r true # 翻转 Y 轴坐标部分引擎导出需要 ./plistdumper -i atlas.plist -t atlas.png -o ./out -y true判断要不要开-y的方法先默认跑一遍看导出的图是不是上下颠倒。如果是加-y true再跑。-r一般不用手动开auto 模式会读 rotated 字段只有字段缺失或错误时才强制。4.3 大图集的内存与并发控制一张 4096x4096 的 RGBA 图集解码后占 64MB 内存如果同时开多个 goroutine 处理多张图集内存会飙。PlistDumper 默认单张串行处理加-c可以开并发# 并发处理最多同时 4 张图集 ./plistdumper -i ./atlases -t ./textures -o ./out -c 4-c的值建议不超过 CPU 核心数且要估算单张图集解码后的内存乘以并发数不超过物理内存。处理 8K 图集时-c设 2 就够设太高反而因为内存交换变慢。如果只是偶尔跑一次保持默认串行最稳。5. 拆图翻车现场五个高频坑与排查5.1 导出的图上下颠倒现象拆出来的图方向反了人物头朝下。原因描述文件用了 Y 轴向上坐标系而程序默认按 Y 轴向下解析。解决加-y true翻转 Y 轴或者用图像工具批量垂直翻转输出目录。判断依据是看 frame 的 y 值分布——如果 y 值从下往上递增基本就是坐标系反了。5.2 旋转图方向错误或尺寸不对现象部分图是横躺的或者宽高对调。原因rotated 字段没被正确读取或者描述文件里旋转标记用的是rotated: 90而不是布尔值。解决先用-r true强制旋转跑一遍对比如果对了说明是字段解析问题检查描述文件里 rotated 的实际写法。有些工具导出的是angle字段需要手动映射。5.3 边缘带杂色或相邻图残影现象导出图的边缘有相邻子图的颜色。原因图集打包时子图间距小于采样半径精确裁剪把邻居裁进来了。解决加-p 1或-p 2做安全边或者在图集源头重新打包时加大 padding。这个坑在缩放过的图集上尤其常见因为缩放会放大采样误差。5.4 文件名乱码或路径穿越现象导出的文件名是乱码或者报错说路径非法。原因描述文件里的 key 含非 ASCII 字符或../这类路径片段。解决PlistDumper 默认会过滤路径分隔符但遇到编码问题需要确认描述文件的字符集。常见做法是先用file命令看描述文件编码UTF-8 和 UTF-16 处理方式不同必要时转码后再跑。5.5 大图集导出到一半失败现象处理 4K 以上图集时程序中断报内存错误。原因单张图解码后内存占用超过可用内存或者输出目录所在磁盘空间不足。解决先确认磁盘剩余空间大于图集解码后尺寸的总和再考虑用-c 1串行跑。如果单张就超内存需要先切分图集再处理或者换 64 位环境跑。6. 进阶把拆图接进自动化流水线单次拆图只是起点真正省时间的是把它接进素材处理流水线。我一般会写一个校验脚本拆完自动比对导出数量和描述文件里的记录数数量对不上就报警——这个习惯帮我拦下过好几次解析漏项。校验逻辑很简单读描述文件里的 key 数量和输出目录的图片数量对比。import os, plistlib # 读 plist 里的子图数量 with open(ui_atlas.plist, rb) as f: data plistlib.load(f) expected len(data[frames]) # 数输出目录的图片数量 actual len([n for n in os.listdir(./output) if n.endswith(.png)]) if expected ! actual: print(f数量不符: 期望 {expected}, 实际 {actual}) else: print(校验通过)这段脚本用 Python 的plistlib读 frames 字典长度再数输出目录的 png 数量。plistlib.load直接吃二进制流不用管 XML 还是二进制 plist。数量对不上时优先检查是不是有子图因为尺寸为 0 被跳过或者 key 重复被加了序号导致计数偏差。再进一步可以把拆图、校验、格式转换串成一条命令。比如拆完统一转成 WebP 减小体积或者按用途分目录归档。我习惯在输出目录里留一个manifest.json记录每个子图的原始 key、frame、sourceSize后续做 UI 还原时直接读这个清单定位资源比翻描述文件快得多。PlistDumper 本身不生成 manifest但输出文件名保留了原始 key写个脚本扫一遍目录就能反推出来。从那以后我每次拆完图都强制走一遍数量校验和方向抽检宁可多花两分钟也不想到用的时候才发现少了几张或者方向反了。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

永磁同步电机弱磁控制:直接计算法策略从原理到FOC实现

永磁同步电机弱磁控制:直接计算法策略从原理到FOC实现

搞电机控制的人迟早都会撞上那堵看不见的墙——基速。额定转速以内,电流和电压都宽裕,想怎么控就怎么控;可一旦用户甩过来一句“我要再快30%”,就会发现反电动势已经顶到逆变器能输出的最高电压,再往上提频率&#xff…

2026/10/19 11:23:28 阅读更多 →
真实城市路网时空图模型实战:T-GCN/AST-GCN/KST-GCN一键复现

真实城市路网时空图模型实战:T-GCN/AST-GCN/KST-GCN一键复现

简介:本资源聚焦城市交通流预测这一典型时空序列建模任务,提供基于图神经网络的多模型完整实现方案,面向计算机、人工智能、交通工程等专业学生、教师及初/中级算法实践者,适用于课程设计、毕业设计、科研入门与项目原型开发。压缩…

2026/10/19 11:23:28 阅读更多 →
AI产品经理能力图谱与智能客服落地实战拆解

AI产品经理能力图谱与智能客服落地实战拆解

1. 写在前面:为什么AI产品经理现在这么吃香,却又这么难招过去两年我面试过的AI产品经理候选人少说也有上百位,简历上几乎清一色写着“熟悉机器学习”“了解深度学习”“做过智能推荐/对话机器人”,但真到实际项目里一聊&#xff0…

2026/10/19 11:23:28 阅读更多 →

最新新闻

BT下载提速指南:每日更新的Tracker列表

BT下载提速指南:每日更新的Tracker列表

BT下载提速指南:每日更新的Tracker列表 【免费下载链接】trackerslist Updated list of public BitTorrent trackers 项目地址: https://gitcode.com/GitHub_Trending/tr/trackerslist 一个热门资源,种子数却只有个位数,下载速度卡在几…

2026/10/19 12:18:31 阅读更多 →
LogicFlow实战指南:从架构设计到自定义节点与性能优化

LogicFlow实战指南:从架构设计到自定义节点与性能优化

简介:LogicFlow 是一款面向前端开发者的流程可视化框架,专注于业务流程建模与流程图编辑场景,基于 TypeScript 与 MVVM 架构设计,内置撤销重做、对齐线、键盘快捷键等开箱即用能力,能快速嵌入业务系统满足类流程图需求…

2026/10/19 12:18:31 阅读更多 →
Free Spire.PDF for Java 免费PDF组件实战与避坑指南

Free Spire.PDF for Java 免费PDF组件实战与避坑指南

简介:这是面向 Java 开发人员的免费 PDF 处理组件包,基于 Free Spire.PDF(Java 版)1.1.0 构建,可在 J2SE 与 J2EE 应用中完成 PDF 文档的读取、写入与保存,全程无需安装 Adobe Acrobat。组件提供绘制文本、…

2026/10/19 12:18:31 阅读更多 →
批量文件重命名:PowerToys PowerRename、Bulk Rename Utility 与总司令

批量文件重命名:PowerToys PowerRename、Bulk Rename Utility 与总司令

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列AIGC(GPT、DeepSeek、豆包、千问、Kimi) 👉关于作者 专注于Android/Unity和各种游戏开发技巧&a…

2026/10/19 12:18:31 阅读更多 →
Winform+MQTTnet自托管通信与消息持久化实战

Winform+MQTTnet自托管通信与消息持久化实战

简介:本资源是一套基于WinForm平台的MQTT通信完整示例工程,面向C#初学者及物联网应用开发人员,解决MQTT协议在桌面端服务端与客户端双向通信、消息持久化等核心实践问题。压缩包共67个文件,涵盖10个关键DLL(含MQTTnet核…

2026/10/19 12:18:31 阅读更多 →
Quick Report 4.05 源码编译与二次开发实战:从环境搭建到套打定位

Quick Report 4.05 源码编译与二次开发实战:从环境搭建到套打定位

简介:Quick Report 4.05 是面向 BCB6(Borland C Builder 6)与 Delphi 7 开发者的报表生成控件包,主要解决可视化报表设计、打印预览与自定义纸张打印等场景中的布局与精度问题。资源以完整源码形式提供,适合需要将报表…

2026/10/19 12:17:30 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →