我用krkrextract解包游戏想提取cg,然后得到一堆pimg文件,虽然可以用GARbro提取,但百多个只能一个个转换,更何况每一个pimg文件里的子文件命名还一样,还得反复重命名区分,实在是太麻烦了。有大佬能提供更快捷的办法吗



591
我用krkrextract解包游戏想提取cg,然后得到一堆pimg文件,虽然可以用GARbro提取,但百多个只能一个个转换,更何况每一个pimg文件里的子文件命名还一样,还得反复重命名区分,实在是太麻烦了。有大佬能提供更快捷的办法吗

本文版权遵循 CC BY-NC 协议 和 本站版权政策
https://github.com/UlyssesWu/FreeMote/releases
krkr大多數是psb檔頭,你garbro解原檔出來,把所有pimg一次過拖去PsbDecompile.exe
json會有各種資料,如x,y,但很難看,要自己研究
@aquber #2
你把这个项目 clone 下来,然后把 main.py 中的 pimg_export_layers 函数改成下面这样就可以解包所有 pimg 图片了
def pimg_export_layers(pimg_path, image_format=".png"):
img_path, json_path, resx_path = pimg_decode(pimg_path)
output_prefix = "./output/{}" + image_format
with open(json_path) as f:
j = json.load(f)
with open(resx_path) as f:
jr = json.load(f)
def layer_id2path(lid: str):
return pimg_path.parent.joinpath(jr["Resources"][str(lid)])
width = j["width"]
height = j["height"]
for i, layer in enumerate(j["layers"]):
layer_id = layer["layer_id"]
name = layer.get("name", f"layer_{i}")
left, top = layer["left"], layer["top"]
pm = Image.open(layer_id2path(layer_id))
im = Image.new("RGBA", (width, height), (0, 0, 0, 0))
im.paste(pm, (left, top), pm if pm.mode == "RGBA" else None)
safe_name = name.replace("/", "_").replace("\\", "_")
im.save(output_prefix.format(safe_name))
pm.close()
shutil.rmtree(img_path.with_suffix(""))
json_path.unlink()
resx_path.unlink()
(。>︿<。) 已经一滴回复都不剩了哦~
6 条回复