RePKG深度指南:Wallpaper Engine PKG提取与TEX转换完整工作流
【免费下载链接】repkgWallpaper engine PKG extractor/TEX to image converter项目地址: https://gitcode.com/gh_mirrors/re/repkg
RePKG 是一款用 C# 编写的命令行工具,用于解包 Wallpaper Engine 的 PKG 资源包,并把其中的 TEX 纹理转换为 PNG/GIF 图像,适合需要分析、归档或二次创作壁纸资源的开发者和进阶用户。它通过逆向工程实现了 PKG 与 TEX 两种私有格式的读写,全部功能都收敛在extract和info两条命令里。
🚀 三步完成从克隆到首次提取
RePKG 主程序目标框架是 .NET Framework 4.7.2(见 RePKG.csproj),因此 Windows 上编译最省事;其他平台有两种替代路线,见后文「跨平台构建」。
准备构建环境
| 平台 | 构建方式 | 说明 |
|---|---|---|
| Windows | MSBuild / Visual Studio | 直接编译 .NET Framework 项目 |
| Linux / macOS | 修改目标框架后dotnet build | 依赖包均为 netstandard2.0 兼容,详见进阶章节 |
| 任何平台 | 直接改目标框架 | 用 .NET SDK 8.0 编译为跨平台可执行文件 |
编译与运行
# 克隆源码 git clone https://gitcode.com/gh_mirrors/re/repkg cd repkg # 编译 Release 版本(需要 MSBuild,Visual Studio 自带) msbuild RePKG.sln /p:Configuration=Release产物位于RePKG/bin/Release/RePKG.exe。项目自带的 Publish.bat 会在此基础上用 ilrepack 把所有依赖合并进单个 exe 并打包 zip,适合发布场景;日常使用直接跑编译产物即可。
第一条提取命令
# 解包单个 PKG,TEX 条目自动转成图像,输出到 ./output RePKG.exe extract scene.pkg -o ./output执行后每个 TEX 条目会生成同名 PNG/GIF 和一个.tex-json元数据文件,其余文件按原始路径原样落盘。
⚙️ 看懂PKG与TEX的内部结构
RePKG 能做到「一个命令解包 + 转图」,关键是对两种格式的二进制布局做了完整解析,核心实现都在 RePKG.Application/Texture/ 与 RePKG.Application/Package/。
PKG:一张目录表加一片数据区
PKG 结构非常直白,可以类比成 zip:头部是「目录」,尾部是「文件内容」:
魔数(长度前缀字符串) 条目数量 int32 └─ 每条: 完整路径(长度前缀字符串) + 偏移量 int32 + 长度 int32 二进制数据区(从表结束处开始)读取时 PackageReader.cs 先按 int32 长度前缀读出魔数和路径,再把偏移量 + 数据区起点作为 Seek 位置按长度拷贝字节。条目的类型不是存在表里的,而是按文件扩展名推断(.tex会触发转图逻辑)。
TEX:双魔数校验 + 三段式内容
一个 TEX 文件依次是:
- 魔数 1 必须是
TEXV0005、魔数 2 必须是TEXI0001,否则直接抛UnknownMagicException; - 头部:宽高、像素格式、标志位。格式枚举只有 6 种:RGBA8888、DXT5、DXT3、DXT1、RG88、R8;
- 图像容器:一张或多张图像,每张带 mipmap 数据。压缩格式(DXT1/3/5)在读取阶段就由内置 DXT 解码器还原成原始像素,后面的转图器只处理非压缩数据。
动画纹理是「多帧图 + 帧信息表」
如果头部带 IsGif 标志,文件末尾还有一段帧信息容器:每帧记录在纹理图集里的位置、旋转方向和帧时长。转换器按这些信息做裁剪和旋转,再交给 ImageSharp 合成 GIF,最后移除占位用的首帧黑帧——这就是为什么动画壁纸能从 TEX 还原成可播放的 GIF。
💡 五个高频场景的参数组合
extract的全部参数只有十个,但组合起来覆盖绝大多数需求。下面按「场景 → 参数」整理最实用的几组:
| 场景 | 命令要点 | 输出特征 |
|---|---|---|
| 解包前先看内容 | info -e -b size | 按大小排序的条目清单 |
| 只要图像类资源 | extract -e tex,png | 仅指定扩展名条目 |
| 还原完整壁纸项目 | extract -c -n | 附 project.json 与预览图 |
| 目录内 TEX 批量转图 | extract -t -s | 扁平输出,文件名不带路径 |
| 覆盖重跑 | extract --overwrite | 不跳过已存在文件 |
提取前先探查
# 打印条目列表,按大小排序,顺便输出 project.json 全部内容 RePKG.exe info scene.pkg -e -b size -p *-b支持 name / extension / size 三种排序键;--title-filter 关键字还能按 project.json 里的 title 过滤,在一堆 PKG 中定位某个项目时很省事。
只挑要的文件
-e(onlyexts)和-i(ignoreexts)都接收逗号分隔的扩展名,写不写点号都行。比如extract scene.pkg -i json,txt可以在保留目录结构的同时去掉配置和文本文件,避免输出目录被淹没。
还原成可编辑的壁纸项目
# 以 project.json 的 title 命名子文件夹,并拷入 project.json 和预览图 RePKG.exe extract -c -n scene.pkg -o ./projects-c和-n配合使用时,输出目录名取自 project.json 的 title(做非法文件名字符清洗),而不是 Workshop 的数字 ID,重打包回 Wallpaper Engine 时路径可直接复用。
单独处理散落的 TEX 文件
extract -t 目录会把该目录下所有.tex转成图像;加-r递归子目录。注意此时输出是扁平的,只保留文件名,适合把散资源统一归档到一个文件夹。
🛠 批量处理与跨平台构建
脚本化批量解包
处理整个 Workshop 内容目录时,extract本身就支持目录输入:传入目录会遍历子文件夹中的.pkg逐个解包,-c -n -r可以一条命令把所有项目还原成带名字的文件夹,无需写循环。需要更细控制时,核心逻辑就是「find + 循环 + 统一参数」:
#!/bin/bash # 找出所有 PKG,逐个解包并转图,覆盖已有输出 mkdir -p ./projects find ./workshop_content -name "*.pkg" | while read pkg; do RePKG.exe extract "$pkg" -c -n -o ./projects --overwrite done转图失败不会中断流程(单条异常被捕获并打印),脚本可以放心跑完整批。
利用 .tex-json 做资源归档
每次转图都会在同目录生成.tex-json文件,记录原始 TEX 的格式与尺寸信息。做素材库时可以把这些 json 单独归入 metadata 目录,日后无需重新解析 TEX 就能按格式筛选素材。
跨平台构建:改一行目标框架
主项目锁定 net472,而它的依赖(ImageSharp、CommandLineParser 等)都兼容 netstandard2.0,所以在 Linux/macOS 上最干净的做法是升级目标框架:把三个 csproj 里的TargetFramework改为net8.0,删除Microsoft.CSharp引用(动态类型已内置),然后dotnet build -c Release即可。改动很小,且不影响任何功能代码。
❓ 三个常见坑:现象、原因、解法
重复解包时文件"消失"
- 现象:第二次执行同一命令,部分文件没有生成,控制台只有一行提示。
- 原因:默认行为是「已存在即跳过」,控制台输出
Skipping, already exists而不是报错。 - 解法:加
--overwrite强制覆盖,或换一个干净的-o输出目录。
Failed to read texture
- 现象:某个 TEX 转换时抛出读图失败,输出目录里没有对应图像。
- 原因:文件前段读不到
TEXV0005/TEXI0001魔数,说明它不是标准 Wallpaper Engine 纹理,或文件已损坏。 - 解法:用十六进制编辑器核对文件头;如果文件来自 PKG,先跑
info -e确认条目完整,再单独提取该条目验证。
-s 模式下同名字母"打架"
- 现象:用
--singledir提取后,比预期少的文件,且目录里只有其中某一个。 - 原因:扁平化后不同子路径下的同名条目落到同一输出路径,先写成功的留下,后面的被跳过。
- 解法:去掉
-s保留原始目录结构;确需扁平输出时,按子项目分多次提取到不同-o目录。
收尾
RePKG 的价值在于把「私有格式解析」这件事封装得足够薄:两条命令、十个参数,却覆盖了从单文件解包、纹理转图到整库项目还原的完整链路,逆向解析逻辑又集中在少数几个 Reader 类中,想扩展格式支持时入口清晰。如果你处理过它的输出,也欢迎带着报错信息回到源码里对照PackageReader和TexReader定位问题——这正是这个项目结构设计的初衷。
提示:本文基于 v0.2.2 源码(主程序目标框架 .NET Framework 4.7.2),命令行选项以
help extract/help info的实时输出为准;程序还支持interactive参数进入交互式命令模式,适合连续处理多个文件。TEX 转图仅覆盖非压缩像素格式,mipmap 压缩数据会在读取阶段先行解码。
【免费下载链接】repkgWallpaper engine PKG extractor/TEX to image converter项目地址: https://gitcode.com/gh_mirrors/re/repkg
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考