from PIL import ImageFont class FontManager: def __init__(self, size=12): self.font = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", size) def set_font_size(self, size): self.font = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", size) def draw_multiline_text(self, draw, text, x, y, width, height): lines = [] words = text.split(" ") line = "" for word in words: test = f"{line} {word}".strip() bbox = self.font.getbbox(test) test_width = bbox[2] - bbox[0] if test_width <= width: line = test else: lines.append(line) line = word lines.append(line) draw.rectangle((0, 0, width, height), outline=0, fill=0) for idx, line in enumerate(lines): draw.text((x, y + idx * self.font.size), line, font=self.font, fill=255) draw.rectangle((0, 0, width, height), outline=0, fill=0) for idx, line in enumerate(lines): draw.text((x, y + idx * self.font.size), line, font=self.font, fill=255)