Spaces:
Runtime error
Runtime error
from typing import Optional, Union | |
from PIL import Image, ImageDraw, ImageFont, ImageFilter | |
def text_draw_default( | |
draw: ImageDraw.Draw, | |
position: tuple, | |
font: str, | |
font_size: int, | |
txt: str, | |
txt_color: Optional[Union[str, tuple]] = None, | |
variation: Optional[str] = None, | |
only_size = False | |
): | |
font = ImageFont.truetype(f"font/{font}", font_size) | |
if variation: font.set_variation_by_name(variation) | |
if not txt_color: txt_color = (255, 255, 255) # Default to white | |
if isinstance(txt_color, str): txt_color = hex2rgb(txt_color) | |
txt_bbox = font.getbbox(txt) | |
txt_size = (txt_bbox[2] - txt_bbox[0], txt_bbox[3] - txt_bbox[1]) | |
if not only_size: | |
draw.text(position, txt, fill=txt_color, font=font) | |
return txt_size | |
def text_draw_center( | |
draw: ImageDraw.Draw, | |
position: tuple, | |
font: str, | |
font_size: int, | |
txt: str, | |
txt_color: Optional[Union[str, tuple[int, int, int]]] = None, | |
variation: Optional[str] = None, | |
only_size = False | |
): | |
font = ImageFont.truetype(f"font/{font}", font_size) | |
# Apply variation if specified | |
if variation: font.set_variation_by_name(variation) | |
# Set default text color to white if not provided | |
if not txt_color: txt_color = (255, 255, 255) # Default to white | |
if isinstance(txt_color, str): txt_color = hex2rgb(txt_color) | |
# Calculate text size | |
txt_bbox = font.getbbox(txt) | |
txt_width = txt_bbox[2] - txt_bbox[0] | |
txt_height = txt_bbox[3] - txt_bbox[1] | |
# Calculate top-left position to center the text | |
top_left_x = position[0] - txt_width / 2 | |
top_left_y = position[1] - txt_height / 2 | |
# Draw the text | |
if not only_size: | |
draw.text((top_left_x, top_left_y), txt, fill=txt_color, font=font) | |
return int(txt_width), int(txt_height) | |
def text_draw_right( | |
draw: ImageDraw.Draw, | |
position: tuple, | |
font: str, | |
font_size: int, | |
txt: str, | |
txt_color: Optional[Union[str, tuple]] = None, | |
variation: Optional[str] = None, | |
only_size = False | |
): | |
font = ImageFont.truetype(f"font/{font}", font_size) | |
if variation: font.set_variation_by_name(variation) | |
if not txt_color: txt_color = (255, 255, 255) # Default to white | |
if isinstance(txt_color, str): txt_color = hex2rgb(txt_color) | |
txt_bbox = font.getbbox(txt) | |
txt_size = (txt_bbox[2] - txt_bbox[0], txt_bbox[3] - txt_bbox[1]) | |
if not only_size: | |
draw.text((position[0]-txt_size[0], position[1]), txt, fill=txt_color, font=font) | |
return txt_size | |
def hex2rgb(hex_color): | |
hex_color = hex_color.lstrip('#') | |
return tuple(int(hex_color[i:i + 2], 16) for i in (0, 2, 4)) |