dashboard-icons/scripts/generate_icons.py

83 lines
2.3 KiB
Python
Raw Normal View History

from icons import IssueFormType, checkAction, iconFactory, checkType
import os
import sys
from pathlib import Path
import requests
from PIL import Image
import cairosvg
ISSUE_FORM_ENV_VAR = "INPUT_ISSUE_FORM"
ROOT_DIR = Path(__file__).resolve().parent.parent
SVG_DIR = ROOT_DIR / "svg"
PNG_DIR = ROOT_DIR / "png"
WEBP_DIR = ROOT_DIR / "webp"
# Ensure the output folders exist
PNG_DIR.mkdir(parents=True, exist_ok=True)
WEBP_DIR.mkdir(parents=True, exist_ok=True)
def request_image(url: str) -> bytes:
response = requests.get(url)
response.raise_for_status()
return response.content
def save_image(image: bytes, path: Path):
with open(path, 'wb') as f:
f.write(image)
def convert_svg_to_png(svg_path: Path) -> bytes:
"""Convert SVG to PNG."""
try:
return cairosvg.svg2png(url=str(svg_path), output_height=512)
except Exception as e:
print(f"Failed to convert {svg_path} to PNG: {e}")
raise e
def save_image_as_webp(image_path: Path, webp_path: Path):
"""Convert an image (PNG or other) to WEBP."""
try:
image = Image.open(image_path).convert("RGBA")
image.save(webp_path, format='WEBP')
except Exception as e:
print(f"Failed to convert {image_path} to WEBP: {e}")
raise e
def main(type: str, action: IssueFormType, issue_form: str):
icon = iconFactory(type, issue_form, action)
convertions = icon.convertions()
for convertion in convertions:
svg_path = SVG_DIR / f"{convertion.name}.svg"
png_path = PNG_DIR / f"{convertion.name}.png"
webp_path = WEBP_DIR / f"{convertion.name}.webp"
imageBytes = request_image(convertion.source)
if icon.type == "svg":
save_image(imageBytes, svg_path)
print(f"Downloaded SVG: {svg_path}")
png_data = convert_svg_to_png(svg_path)
save_image(png_data, png_path)
print(f"Converted PNG: {png_path}")
if icon.type == "png":
save_image(imageBytes, png_path)
print(f"Downloaded PNG: {png_path}")
save_image_as_webp(png_path, webp_path)
print(f"Converted WEBP: {webp_path}")
if (__name__ == "__main__"):
type = checkType(sys.argv[1])
action = checkAction(sys.argv[2])
main(
type,
action,
os.getenv(ISSUE_FORM_ENV_VAR)
)