Files
class/scripts/export_gzhh_gallery.py
T
2026-07-18 09:13:04 +08:00

57 lines
1.6 KiB
Python

import json
from pathlib import Path
from PIL import Image, ImageOps
ROOT = Path(__file__).resolve().parents[1]
BASE = ROOT / ".tmp" / "gzhh-images"
AUDIT = BASE / "audit.json"
OUTPUT = ROOT / "public" / "assets" / "wechat-archive"
SELECTED_IDS = [
81, 84, 85, 88, 89,
117, 121, 129, 132,
145, 146, 150, 151, 152, 153,
159, 160, 161, 162,
176, 178, 180, 181,
193, 196, 197,
368, 370, 373, 375,
382, 387, 388, 391,
396, 405, 408, 411,
446, 455, 459,
470, 480, 490, 499,
]
records = {item["id"]: item for item in json.loads(AUDIT.read_text(encoding="utf-8"))}
OUTPUT.mkdir(parents=True, exist_ok=True)
exported = []
for image_id in SELECTED_IDS:
record = records[image_id]
source_path = ROOT / record["path"]
output_name = f"wechat-{image_id:03d}.webp"
output_path = OUTPUT / output_name
with Image.open(source_path) as image:
frame = ImageOps.exif_transpose(image).convert("RGB")
frame.thumbnail((1800, 1800), Image.Resampling.LANCZOS)
frame.save(output_path, "WEBP", quality=84, method=6)
exported.append({
"id": image_id,
"file": output_name,
"source": record.get("sources", [""])[0],
"width": frame.width,
"height": frame.height,
"bytes": output_path.stat().st_size,
})
(BASE / "selected-manifest.json").write_text(
json.dumps(exported, ensure_ascii=False, indent=2) + "\n",
encoding="utf-8",
)
print(json.dumps({
"selected": len(exported),
"bytes": sum(item["bytes"] for item in exported),
"output": str(OUTPUT.relative_to(ROOT)),
}, ensure_ascii=False))