切換到寬版
  • 233閱讀
  • 2回復

解壓TZW壓縮檔PYTHON工具 [複製鏈接]

上一主題 下一主題
離線andyh630
 

發帖
55
icash
121
威望
29
真的不得不感歎AI的強大
整個腳本都是AI寫的

請事先安裝PYTHON以確保腳本能夠執行


import os
import sys
def find_image_chunks(data, signatures):
    found_chunks = []
    for fmt, sig in signatures.items():
        index = 0
        while index < len(data):
            idx = data.find(sig, index)
            if idx == -1:
                break
            if fmt == "PNG":
                end = data.find(b'IEND', idx)
                if end != -1:
                    end += 8  # Include CRC
                    chunk = data[idx:end]
                    found_chunks.append((fmt, idx, chunk))
                    index = end
                    continue
            elif fmt == "JPEG":
                end = data.find(b'\xff\xd9', idx)
                if end != -1:
                    end += 2
                    chunk = data[idx:end]
                    found_chunks.append((fmt, idx, chunk))
                    index = end
                    continue
            index = idx + 1
    return found_chunks
def main(input_path):
    with open(input_path, "rb") as f:
        data = f.read()
    signatures = {
        "PNG": b"\x89PNG\r\n\x1a\n",
        "JPEG": b"\xff\xd8\xff",
    }
    chunks = find_image_chunks(data, signatures)
    output_dir = os.path.splitext(input_path)[0] + "_extracted_images"
    os.makedirs(output_dir, exist_ok=True)
    for i, (fmt, offset, chunk) in enumerate(chunks):
        ext = ".png" if fmt == "PNG" else ".jpg"
        out_path = os.path.join(output_dir, f"image_{i+1}_{offset}{ext}")
        with open(out_path, "wb") as out_file:
            out_file.write(chunk)
        print(f"Extracted: {out_path}")
    print(f"共找到 {len(chunks)} 張圖片,已儲存在資料夾: {output_dir}")
if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("使用方式: python extract_images.py <檔案路徑>")
    else:
        main(sys.argv[1])

把該文本儲存成.py檔
然後拖曳lfoxxx.tzw檔到PY檔就自動解壓


然後是重新壓縮


import os
import tkinter as tk
from tkinter import filedialog, messagebox

def repack_images_from_folder(input_folder, output_path):
    try:
        files = sorted(os.listdir(input_folder), key=lambda x: int(x.split('_')[2].split('.')[0]))
        with open(output_path, 'wb') as out:
            for fname in files:
                path = os.path.join(input_folder, fname)
                with open(path, 'rb') as f:
                    out.write(f.read())
        messagebox.showinfo("成功", f"已重新封裝為 {output_path}")
    except Exception as e:
        messagebox.showerror("錯誤", str(e))

def select_folder_and_pack():
    # Get the script's root directory
    root_directory = os.path.dirname(os.path.realpath(__file__))

    folder = filedialog.askdirectory(initialdir=root_directory, title="選擇原始圖片資料夾")
    if not folder:
        return

    output_path = filedialog.asksaveasfilename(
        initialdir=root_directory,  # Set the default directory to the script's root
        defaultextension=".tzw",
        filetypes=[("TZW 檔案", "*.tzw"), ("所有檔案", "*.*")],
        title="儲存封裝檔"
    )
    if not output_path:
        return

    repack_images_from_folder(folder, output_path)

if __name__ == "__main__":
    root = tk.Tk()
    root.title("TZW 重封裝器(保留位元)")
    root.geometry("320x130")

    label = tk.Label(root, text="點擊選擇資料夾並重新封裝為 .tzw", font=("Arial", 12))
    label.pack(pady=10)

    btn = tk.Button(root, text="選擇資料夾並封裝", command=select_folder_and_pack, font=("Arial", 12))
    btn.pack(pady=5)

    root.mainloop()


雙擊2下 GUI介面 一看就懂操作
(但這邊有個問題 解壓縮後的圖像一定要全部都沒有錯誤才可以重壓 不然會出錯)
(另外我沒測試過 請修改前把舊檔案備份 以免修改後打不開遊戲)
離線andyh630

發帖
55
icash
121
威望
29
只看該作者 1樓  發表於: 04-06
另外之前在str1ckland大大公開密碼前 困擾我們N年的.LFO壓縮檔密碼 AI也用了一小時左右時間就解開了


也太恐怖
離線9991112
發帖
42
icash
279
威望
54
只看該作者 2樓  發表於: 04-12
樓主勁到.
快速回復
限100 字節
 
上一個 下一個