RafaelJaime's picture
some tools, and openai framework to generate image
d4174bb
raw
history blame
2.04 kB
from PIL import Image, ImageDraw, ImageFont
import os
from typing import Optional, Tuple, Dict, Any
def add_text_to_image(
image_path: str,
text: str,
color: Optional[Tuple[int, int, int]] = None,
output_name: Optional[str] = None
) -> Dict[str, Any]:
"""
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.
"""
try:
if color is None:
color = (0, 0, 0)
image = Image.open(image_path)
draw = ImageDraw.Draw(image)
font = ImageFont.load_default()
text_width = draw.textlength(text, font=font)
x = (image.width - text_width) / 2
y = image.height / 2
draw.text((x, y), text, fill=color, font=font)
base_dir = os.path.dirname(image_path)
base_name, ext = os.path.splitext(os.path.basename(image_path))
if output_name:
new_filename = f"{output_name}{ext}"
else:
new_filename = f"{base_name}_edited{ext}"
new_path = os.path.join(base_dir, new_filename)
image.save(new_path)
output_size = os.path.getsize(new_path)
return {
"success": True,
"message": "Text added successfully to the image",
"input_path": image_path,
"output_path": new_path,
"output_size_bytes": output_size,
"text": text,
"color": color
}
except Exception as e:
return {
"success": False,
"error": str(e),
"input_path": image_path,
"output_path": None
}