Spaces:
Sleeping
Sleeping
File size: 2,632 Bytes
71970fd bf09443 71970fd fd666eb 71970fd bf09443 71970fd bf09443 71970fd bf09443 4f0f4ad 4f18526 bf09443 71970fd bf09443 71970fd bf09443 71970fd bf09443 71970fd bf09443 71970fd 4f0f4ad 71970fd 4f0f4ad 71970fd bf09443 4f0f4ad 8738a69 bf09443 dc0af05 8738a69 90dfc35 8738a69 bf09443 fd666eb 4f18526 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
from PIL import Image, ImageDraw, ImageFont
import os
IMAGE_DIR = "/tmp/images"
os.makedirs(IMAGE_DIR, exist_ok=True)
def get_text_size(text, font):
bbox = font.getbbox(text)
width = bbox[2] - bbox[0]
height = bbox[3] - bbox[1]
return width, height
def create_text_image(text,id,image_olst, image_size=(1280, 720), bg_color="white", text_color="black"):
image = Image.new("RGB", image_size, color=bg_color)
draw = ImageDraw.Draw(image)
font_path = "/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf"
bold_font_path = "/usr/share/fonts/truetype/liberation/LiberationSans-Bold.ttf"
max_font_size = 55
min_font_size = 10
best_font = None
best_lines = []
for font_size in range(max_font_size, min_font_size, -2):
font = ImageFont.truetype(font_path, font_size)
words = text.split()
lines = []
current_line = ""
lines_raw = text.splitlines()
lines = []
for raw_line in lines_raw:
words = raw_line.split()
current_line = ""
left_padding = 80
right_padding = 80
max_text_width = image_size[0] - left_padding - right_padding
for word in words:
test_line = f"{current_line} {word}" if current_line else word
w, _ = get_text_size(test_line, font)
if w <= max_text_width:
current_line = test_line
else:
lines.append(current_line)
current_line = word
if current_line:
lines.append(current_line)
total_height = sum(get_text_size(line, font)[1] + 23 for line in lines)
if total_height <= image_size[1] * 0.95:
best_font = font
best_lines = lines
break
heading_color = "#0033cc" # Deep attractive blue
normal_color = text_color # Usually black
y = (image_size[1] - total_height) // 2
for line in best_lines:
is_heading = line.strip().startswith("#") and (line.strip().endswith("?") or line.strip().endswith(":"))
font_to_use = ImageFont.truetype(bold_font_path, best_font.size) if is_heading else best_font
color_to_use = heading_color if is_heading else normal_color
w, h = get_text_size(line, font_to_use)
x = 80 # Left padding
draw.text((x, y), line, font=font_to_use, fill=color_to_use)
y += h + 23
image_name="slide"+str(id)+".png"
image_olst.append(image_name)
image_path=os.path.join(IMAGE_DIR,image_name)
image.save(image_path) |