feat: add second-victory relief exploration
This commit is contained in:
60
scripts/build-exploration-background.py
Normal file
60
scripts/build-exploration-background.py
Normal file
@@ -0,0 +1,60 @@
|
||||
"""Build an opaque, desktop-sized WebP exploration background."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
from pathlib import Path
|
||||
|
||||
from PIL import Image, ImageOps
|
||||
|
||||
|
||||
def parse_args() -> argparse.Namespace:
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--input", required=True, type=Path)
|
||||
parser.add_argument("--output", required=True, type=Path)
|
||||
parser.add_argument("--width", type=int, default=1920)
|
||||
parser.add_argument("--height", type=int, default=1080)
|
||||
parser.add_argument("--quality", type=int, default=88)
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
def main() -> None:
|
||||
args = parse_args()
|
||||
if args.width <= 0 or args.height <= 0:
|
||||
raise ValueError("Output dimensions must be positive.")
|
||||
if not 1 <= args.quality <= 100:
|
||||
raise ValueError("WebP quality must be between 1 and 100.")
|
||||
|
||||
output_path = args.output.resolve()
|
||||
output_path.parent.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
with Image.open(args.input) as source:
|
||||
rgb_source = ImageOps.exif_transpose(source).convert("RGB")
|
||||
resized = ImageOps.fit(
|
||||
rgb_source,
|
||||
(args.width, args.height),
|
||||
method=Image.Resampling.LANCZOS,
|
||||
centering=(0.5, 0.5),
|
||||
)
|
||||
resized.save(
|
||||
output_path,
|
||||
format="WEBP",
|
||||
quality=args.quality,
|
||||
method=6,
|
||||
exact=False,
|
||||
)
|
||||
|
||||
with Image.open(output_path) as result:
|
||||
if result.size != (args.width, args.height) or result.mode != "RGB":
|
||||
raise RuntimeError(
|
||||
f"Unexpected output: {result.size[0]}x{result.size[1]} {result.mode}"
|
||||
)
|
||||
|
||||
print(
|
||||
f"Built {output_path} ({args.width}x{args.height}, "
|
||||
f"{output_path.stat().st_size} bytes)."
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user