Add the project-avatar script.
This commit is contained in:
		
							parent
							
								
									7f3531b428
								
							
						
					
					
						commit
						5c19efbff4
					
				|  | @ -0,0 +1,125 @@ | ||||||
|  | #!/usr/bin/env python3 | ||||||
|  | 
 | ||||||
|  | import argparse | ||||||
|  | import os | ||||||
|  | import re | ||||||
|  | import subprocess | ||||||
|  | import sys | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def main() -> None: | ||||||
|  |     parser = create_parser() | ||||||
|  |     args = parser.parse_args() | ||||||
|  | 
 | ||||||
|  |     if os.path.isfile(args.filename): | ||||||
|  |         if args.overwrite: | ||||||
|  |             os.remove(args.filename) | ||||||
|  |         else: | ||||||
|  |             print("Target file already exists, use --overwrite to overwrite.") | ||||||
|  |             sys.exit(1) | ||||||
|  | 
 | ||||||
|  |     subprocess.run( | ||||||
|  |         [ | ||||||
|  |             "gegl", | ||||||
|  |             "-o", | ||||||
|  |             args.filename, | ||||||
|  |             "--", | ||||||
|  |             *gegl_graph(args.height, args.width, args.text), | ||||||
|  |         ], | ||||||
|  |         check=True, | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|  |     if not os.path.isfile(args.filename): | ||||||
|  |         print("Something went wrong with GEGL") | ||||||
|  |         sys.exit(1) | ||||||
|  | 
 | ||||||
|  |     subprocess.run( | ||||||
|  |         [ | ||||||
|  |             "convert", | ||||||
|  |             args.filename, | ||||||
|  |             "-background", | ||||||
|  |             "transparent", | ||||||
|  |             "-gravity", | ||||||
|  |             "center", | ||||||
|  |             "-extent", | ||||||
|  |             f"{args.width}x{args.height}", | ||||||
|  |             args.filename, | ||||||
|  |         ], | ||||||
|  |         check=True, | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|  |     if args.clean: | ||||||
|  |         subprocess.run( | ||||||
|  |             [ | ||||||
|  |                 "mat2", | ||||||
|  |                 "--inplace", | ||||||
|  |                 args.filename, | ||||||
|  |             ], | ||||||
|  |             check=True, | ||||||
|  |         ) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def create_parser() -> argparse.ArgumentParser: | ||||||
|  |     parser = argparse.ArgumentParser(description="Project Avatar Generator") | ||||||
|  |     parser.add_argument( | ||||||
|  |         "filename", | ||||||
|  |         help="The image filename to write to.", | ||||||
|  |     ) | ||||||
|  |     parser.add_argument( | ||||||
|  |         "text", | ||||||
|  |         help="The text for the project avatar.", | ||||||
|  |     ) | ||||||
|  |     parser.add_argument( | ||||||
|  |         "--width", | ||||||
|  |         help="The width of the image.", | ||||||
|  |         type=int, | ||||||
|  |         default=256, | ||||||
|  |     ) | ||||||
|  |     parser.add_argument( | ||||||
|  |         "--height", | ||||||
|  |         help="The height of the image.", | ||||||
|  |         type=int, | ||||||
|  |         default=256, | ||||||
|  |     ) | ||||||
|  |     parser.add_argument( | ||||||
|  |         "--overwrite", | ||||||
|  |         help="Overwrite an existing image.", | ||||||
|  |         action="store_true", | ||||||
|  |     ) | ||||||
|  |     parser.add_argument( | ||||||
|  |         "--clean", | ||||||
|  |         help="Use MAT2 to clean the image.", | ||||||
|  |         action="store_true", | ||||||
|  |     ) | ||||||
|  |     return parser | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def gegl_graph(height: int, width: int, text: str) -> typing.List[str]: | ||||||
|  |     graph = f""" | ||||||
|  | gegl:text | ||||||
|  |     string={text} | ||||||
|  |     width={width} | ||||||
|  |     height={height} | ||||||
|  |     color=white | ||||||
|  |     font=Heavitas | ||||||
|  |     size=150 | ||||||
|  |     alignment=1 | ||||||
|  |     vertical-alignment=1 | ||||||
|  | gegl:dropshadow | ||||||
|  |     x=0 | ||||||
|  |     y=0 | ||||||
|  |     color=black | ||||||
|  |     opacity=1 | ||||||
|  |     grow-radius=4 | ||||||
|  |     radius=0 | ||||||
|  | gegl:long-shadow | ||||||
|  |     angle=90 | ||||||
|  |     color=black | ||||||
|  |     length=20 | ||||||
|  | """ | ||||||
|  | 
 | ||||||
|  |     return re.sub("\s\s+", "\n", graph).strip().splitlines() | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | if __name__ == "__main__": | ||||||
|  |     main() | ||||||
		Reference in New Issue