梅露露的炼金工房解包物品图片
访问:https://github.com/CatClawed/pssg-g1t-extractor,下载里面的extractor.py文件
进入steamapps\common\Atelier Meruru ~The Apprentice of Arland~ DX\Res\x64\winxls目录,复制a13_itempicture.PSSG
新建一个目录,将a13_itempicture.PSSG和extractor.py放在该目录下,执行python extractor.py a13_itempicture.PSSG,执行完毕之后会有一大堆g1t文件
访问https://github.com/VitaSmith/gust_tools,在右侧的Releases下载最新的gust_tools,然后解压缩,将解压出来的gust_g1t.exe拷贝到之前新建的目录里
然后在新建的目录中新建 extract.py 文件,内容如下
"""
整合脚本:g1t → 收集 DDS → 翻转并转为 PNG → 清理中间文件
用法:python script.py [前缀]
例如:python script.py a13_item_
若不提供参数,会交互式询问前缀(默认 a13_item_)
"""
import subprocess
import glob
import os
import sys
import shutil
import imageio.v3 as iio
import numpy as np
# ===== 配置(可按需修改) =====
GUST_EXE = "gust_g1t.exe" # gust_g1t.exe 的路径(若不在 PATH 中请补全)
# =============================
def get_prefix():
"""获取处理前缀:命令行参数或交互输入"""
if len(sys.argv) > 1:
prefix = sys.argv[1]
print(f"使用命令行指定的前缀: {prefix}")
else:
prefix = input("请输入目录前缀(默认 a13_item_): ").strip()
if not prefix:
prefix = "a13_item_"
print(f"使用默认前缀: {prefix}")
return prefix
def run_g1t_to_dds(prefix):
"""步骤1:调用 gust_g1t.exe 转换以指定前缀开头的 .g1t 文件"""
pattern = f"{prefix}*.g1t"
g1t_files = glob.glob(pattern)
if not g1t_files:
print(f"未找到匹配 '{pattern}' 的 .g1t 文件,跳过转换步骤。")
return
print(f"找到 {len(g1t_files)} 个 .g1t 文件,开始转换...")
for g1t in g1t_files:
print(f" 处理: {g1t}")
subprocess.run(
[GUST_EXE, g1t],
stderr=subprocess.DEVNULL,
check=False
)
print(f" 完成: {g1t}")
print("g1t 转换结束。\n")
def collect_dds(prefix, dds_dir):
"""步骤2:将以 prefix 开头的目录中的 000.dds 复制到 dds_dir"""
os.makedirs(dds_dir, exist_ok=True)
# 匹配以 prefix 开头的目录
dirs = [d for d in glob.glob(f"{prefix}*") if os.path.isdir(d)]
# 排除 dds_dir 和 png_dir 自身(防止误收集)
dirs = [d for d in dirs if os.path.basename(d) not in (os.path.basename(dds_dir), os.path.basename(png_dir))]
if not dirs:
print(f"未找到以 '{prefix}' 开头的目录(已排除中间/输出目录),跳过收集步骤。")
return
print(f"开始收集 DDS,目标目录:{dds_dir}")
for d in dirs:
src = os.path.join(d, "000.dds")
if os.path.isfile(src):
dst_name = os.path.basename(d) + ".dds"
dst = os.path.join(dds_dir, dst_name)
shutil.copy2(src, dst)
print(f" 已复制: {src} -> {dst}")
else:
print(f" 警告: {d} 中未找到 000.dds,已跳过。")
print("DDS 收集完成。\n")
def convert_dds_to_png(dds_dir, png_dir):
"""步骤3:将 dds_dir 下的所有 .dds 垂直翻转并保存为 .png 到 png_dir"""
os.makedirs(png_dir, exist_ok=True)
dds_files = glob.glob(os.path.join(dds_dir, "*.dds"))
if not dds_files:
print(f"在 {dds_dir} 中未找到 .dds 文件,跳过转换步骤。")
return
print(f"开始将 DDS 转为 PNG,输出目录:{png_dir}")
for dds_path in dds_files:
base = os.path.basename(dds_path)
png_name = os.path.splitext(base)[0] + ".png"
png_path = os.path.join(png_dir, png_name)
img = iio.imread(dds_path)
flipped = np.flipud(img)
iio.imwrite(png_path, flipped)
print(f" 已转换: {dds_path} -> {png_path}")
print("PNG 转换完成。\n")
def cleanup_intermediates(prefix, dds_dir, png_dir):
"""清理中间产物:删除以 prefix 开头的目录(跳过 png_dir),以及 dds_dir"""
# 删除以 prefix 开头的所有目录,但保留 png_dir
for d in glob.glob(f"{prefix}*"):
if os.path.isdir(d) and os.path.basename(d) != os.path.basename(png_dir):
shutil.rmtree(d)
print(f" 已删除目录: {d}")
# 确保 dds_dir 也被删除(可能不匹配 prefix 或已经被上面删除,做兜底)
if os.path.isdir(dds_dir):
shutil.rmtree(dds_dir)
print(f" 已删除目录: {dds_dir}")
print("清理完成。")
if __name__ == "__main__":
prefix = get_prefix()
# 根据前缀动态生成中间和输出目录名(保持原命名规则)
dds_dir = f"{prefix}dds"
png_dir = f"{prefix}png"
run_g1t_to_dds(prefix)
collect_dds(prefix, dds_dir)
convert_dds_to_png(dds_dir, png_dir)
cleanup_intermediates(prefix, dds_dir, png_dir)
print(f"\n全部处理完成!最终输出目录: {png_dir}")
input("按 Enter 键退出...")
执行代码python extract.py a13_item_,就会生成一个a13_item_png文件夹,里面是我们所需要的物品图片
执行代码python extract.py a13_monspicture_,就会生成一个a13_monspicture_png文件夹,里面是我们所需要的怪物图片

浙公网安备 33010602011771号