mirror of
				https://github.com/walkxcode/dashboard-icons.git
				synced 2025-10-28 14:09:05 +08:00 
			
		
		
		
	
		
			
	
	
		
			83 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			83 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | 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) | ||
|  |     ) |