Spaces:
Sleeping
Sleeping
from PIL import Image, ImageDraw, ImageFont | |
import os | |
from typing import Optional, Tuple, Dict, Any | |
def parse_color(color_str): | |
if color_str.startswith('rgba('): | |
values = color_str[5:-1].split(',') | |
r = int(float(values[0])) | |
g = int(float(values[1])) | |
b = int(float(values[2])) | |
return (r, g, b) | |
elif color_str.startswith('rgb('): | |
values = color_str[4:-1].split(',') | |
r = int(float(values[0])) | |
g = int(float(values[1])) | |
b = int(float(values[2])) | |
return (r, g, b) | |
elif color_str.startswith('#'): | |
return color_str | |
else: | |
return color_str | |
def add_text_to_image_base64(image, text, x, y, font_size, color, centered=False): | |
""" | |
Adds centered text to an image and saves the result in the same folder. | |
If no output_name is provided, '_edited' is appended to the original filename. | |
If no color is provided, black is used by default. | |
Args: | |
image_path: Path to the original image. | |
text: Text to write on the image. | |
color: Optional RGB color of the text. Defaults to black. | |
output_name: Optional output filename (without extension). | |
Returns: | |
Dictionary with success status and info. | |
""" | |
if image is None: | |
return None | |
img = image.copy() | |
draw = ImageDraw.Draw(img) | |
try: | |
font = ImageFont.truetype("arial.ttf", font_size) | |
except: | |
try: | |
font = ImageFont.truetype("/System/Library/Fonts/Arial.ttf", font_size) | |
except: | |
font = ImageFont.load_default() | |
parsed_color = parse_color(color) | |
if centered: | |
bbox = draw.textbbox((0, 0), text, font=font) | |
text_width = bbox[2] - bbox[0] | |
text_height = bbox[3] - bbox[1] | |
x = (img.width - text_width) // 2 | |
y = (img.height - text_height) // 2 | |
draw.text((x, y), text, fill=parsed_color, font=font) | |
return img |