1
Fork 0

Add the project-avatar script.

This commit is contained in:
Bauke 2022-09-25 15:14:53 +02:00
parent 7f3531b428
commit 5c19efbff4
Signed by: Bauke
GPG Key ID: C1C0F29952BCF558
1 changed files with 125 additions and 0 deletions

125
.local/bin/project-avatar Executable file
View File

@ -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()