mirror of
https://github.com/walkxcode/dashboard-icons.git
synced 2025-10-27 13:39:03 +08:00
feat: add issue_templates for creation of icons (#935)
Co-authored-by: Dashboard Icons Bot <homarr-labs@proton.me>
This commit is contained in:
83
scripts/generate_icons.py
Normal file
83
scripts/generate_icons.py
Normal file
@@ -0,0 +1,83 @@
|
||||
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)
|
||||
)
|
||||
Reference in New Issue
Block a user