mirror of
				https://github.com/walkxcode/dashboard-icons.git
				synced 2025-10-27 05:29:03 +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)
 | |
|     ) | 
