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()
|
Loading…
Reference in New Issue