You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1019 B
Python
41 lines
1019 B
Python
from __future__ import annotations
|
|
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
from PIL import Image
|
|
|
|
|
|
def build_square_ico(src: Path, dst: Path) -> None:
|
|
im = Image.open(src).convert("RGBA")
|
|
w, h = im.size
|
|
s = max(w, h)
|
|
square = Image.new("RGBA", (s, s), (0, 0, 0, 0))
|
|
square.paste(im, ((s - w) // 2, (s - h) // 2))
|
|
square = square.resize((256, 256), Image.LANCZOS)
|
|
|
|
# A single 256x256 icon is sufficient for modern Windows; smaller sizes
|
|
# will be auto-derived by the shell if needed.
|
|
square.save(dst, format="ICO")
|
|
|
|
|
|
def main(argv: list[str]) -> int:
|
|
if len(argv) != 3:
|
|
print("Usage: python make_icon.py <src.ico> <dst.ico>", file=sys.stderr)
|
|
return 2
|
|
|
|
src = Path(argv[1]).resolve()
|
|
dst = Path(argv[2]).resolve()
|
|
|
|
if not src.exists():
|
|
print(f"Icon source not found: {src}", file=sys.stderr)
|
|
return 2
|
|
|
|
build_square_ico(src, dst)
|
|
print(f"Wrote: {dst}")
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main(sys.argv))
|