import sys
from pathlib import Path
from PIL import Image
ROOT = Path(__file__).resolve().parent.parent
STATIC = ROOT / "website" / "static"
DEFAULT_SRC = Path.home() / "Desktop" / "netsky-mark-source.png"
THRESHOLD = 28
FEATHER = 40
def strip_and_square(src: Path) -> Image.Image:
img = Image.open(src).convert("RGBA")
px = img.load()
w, h = img.size
for y in range(h):
for x in range(w):
r, g, b, a = px[x, y]
brightness = max(r, g, b)
if brightness <= THRESHOLD:
px[x, y] = (0, 0, 0, 0)
elif brightness < THRESHOLD + FEATHER:
t = (brightness - THRESHOLD) / FEATHER
px[x, y] = (r, g, b, min(a, int(255 * t)))
bbox = img.getbbox()
cropped = img.crop(bbox) if bbox else img
cw, ch = cropped.size
side = max(cw, ch)
square = Image.new("RGBA", (side, side), (0, 0, 0, 0))
square.paste(cropped, ((side - cw) // 2, (side - ch) // 2), cropped)
return square
def main() -> None:
src = Path(sys.argv[1]) if len(sys.argv) > 1 else DEFAULT_SRC
if not src.exists():
sys.exit(f"source not found: {src}")
STATIC.mkdir(parents=True, exist_ok=True)
square = strip_and_square(src)
square.save(STATIC / "netsky-mark-transparent.png", "PNG")
square.resize((512, 512), Image.LANCZOS).save(
STATIC / "netsky-mark-transparent-512.png", "PNG"
)
square.resize((480, 480), Image.LANCZOS).save(
STATIC / "netsky-mark-hero.png", "PNG"
)
print(f"src: {src}")
print(f"full: {square.size} -> {STATIC / 'netsky-mark-transparent.png'}")
print(f"512: -> {STATIC / 'netsky-mark-transparent-512.png'}")
print(f"hero: 480 -> {STATIC / 'netsky-mark-hero.png'}")
if __name__ == "__main__":
main()