doomcc/dcc/text.py

47 lines
1.6 KiB
Python

import dcc.doom_base
import sys
import wand.drawing
import wand.image
def draw_text(img, text, font, text_fill, text_stroke, font_size=64):
with wand.drawing.Drawing() as draw:
draw.font = font
draw.font_size = font_size
draw.fill_color = wand.color.Color(text_fill)
draw.stroke_color = wand.color.Color(text_stroke)
draw.stroke_width = font_size * 5 / 32
draw.text_interline_spacing = -font_size / 4
draw.text(5, int(draw.font_size) + 5, text)
draw(img)
draw.stroke_color = wand.color.Color("none")
draw.stroke_width = 0
draw.text(5, int(draw.font_size)+5, text)
draw(img)
class Text(dcc.doom_base.WadMap):
def get_parser(self, prog_name):
parser = super().get_parser(prog_name)
parser.add_argument("--nomap", action="store_true")
parser.add_argument("--demotype", default="UV-Max Demo")
return parser
def take_action(self, parsed_args):
text = sys.stdin.read().rstrip()
if not parsed_args.nomap:
text = "MAP{}: {}".format(parsed_args.map, text)
text = "{}\n{}".format(text, parsed_args.demotype)
with wand.image.Image(
height=self.thumbnail_height,
width=self.thumbnail_width
) as img:
draw_text(
img, text,
self.thumbnail_font,
self.thumbnail_text_fill,
self.thumbnail_text_stroke
)
img.trim()
img.reset_coords()
img.save(filename=self.text_thumb_path())