29 lines
870 B
Python
29 lines
870 B
Python
# /// script
|
|
# requires-python = ">=3.10"
|
|
# dependencies = ["pillow"]
|
|
# ///
|
|
"""Genereer downscaled WebP-varianten voor responsive srcset.
|
|
Usage: uv run --native-tls scripts/img-variants.py <input.webp> <w1,w2,...> [quality]
|
|
Schrijft <stem>-<w>.webp voor elke breedte kleiner dan het origineel."""
|
|
import os
|
|
import sys
|
|
from PIL import Image
|
|
|
|
inp = sys.argv[1]
|
|
widths = [int(w) for w in sys.argv[2].split(",")]
|
|
quality = int(sys.argv[3]) if len(sys.argv) > 3 else 80
|
|
|
|
img = Image.open(inp)
|
|
ow, oh = img.size
|
|
stem, ext = os.path.splitext(inp)
|
|
|
|
for w in widths:
|
|
if w >= ow:
|
|
print(f"skip {w} (>= origineel {ow})")
|
|
continue
|
|
h = round(oh * w / ow)
|
|
resized = img.resize((w, h), Image.LANCZOS)
|
|
out = f"{stem}-{w}.webp"
|
|
resized.save(out, "WEBP", quality=quality, method=6)
|
|
print(f"saved {out} ({w}x{h}, {os.path.getsize(out) // 1024} KB)")
|