mirror of
				https://github.com/walkxcode/dashboard-icons.git
				synced 2025-10-31 16:57:58 +01: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