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