Files
BSI-901-fpga-software/tmp/fpga_doc2/extract_media.py
T

32 lines
1.1 KiB
Python

from pathlib import Path
from zipfile import ZipFile
from PIL import Image, ImageDraw, ImageFont
import io, sys
src = Path(sys.argv[1])
out = Path(sys.argv[2])
out.mkdir(parents=True, exist_ok=True)
items = []
with ZipFile(src) as zf:
for name in zf.namelist():
if name.startswith("word/media/"):
data = zf.read(name)
target = out / Path(name).name
target.write_bytes(data)
try:
im = Image.open(io.BytesIO(data)).convert("RGB")
items.append((target.name, im.copy(), im.size))
except Exception:
pass
thumb_w, thumb_h = 300, 220
sheet = Image.new("RGB", (thumb_w * 4, (thumb_h + 36) * ((len(items)+3)//4)), "white")
draw = ImageDraw.Draw(sheet)
for i, (name, im, size) in enumerate(items):
x, y = (i % 4) * thumb_w, (i // 4) * (thumb_h + 36)
im.thumbnail((thumb_w-10, thumb_h-10))
sheet.paste(im, (x + (thumb_w-im.width)//2, y + 5))
draw.text((x+5, y+thumb_h+3), f"{name} {size[0]}x{size[1]}", fill="black")
sheet.save(out / "contact_sheet.jpg", quality=90)
print(f"extracted={len(items)} sheet={out/'contact_sheet.jpg'}")