Spaces:
Running
Running
kwabs22
commited on
Commit
·
cf6fafe
1
Parent(s):
5f93b50
Change the Caption function with proper version
Browse files
app.py
CHANGED
|
@@ -537,23 +537,71 @@ def removeTonalMarks(string):
|
|
| 537 |
return noTonalMarksStr
|
| 538 |
|
| 539 |
|
| 540 |
-
def add_text_to_image(input_image, text, output_image_path="output.png", border_size=2):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 541 |
text = removeTonalMarks(text)
|
| 542 |
-
imagearr = np.asarray(input_image)
|
| 543 |
-
|
|
|
|
| 544 |
img = Image.fromarray(imagearr)
|
|
|
|
| 545 |
draw = ImageDraw.Draw(img)
|
| 546 |
-
font = ImageFont.truetype(
|
| 547 |
-
|
| 548 |
-
|
| 549 |
x = (width - text_width) / 2
|
| 550 |
y = (height - text_height) / 2
|
| 551 |
-
|
|
|
|
| 552 |
for dx, dy in [(0, 0), (border_size, border_size), (-border_size, -border_size), (border_size, -border_size), (-border_size, border_size)]:
|
| 553 |
draw.text((x + dx, y + dy), text, font=font, fill=(255, 255, 255))
|
| 554 |
draw.text((x, y), text, font=font, fill=(0, 0, 0))
|
| 555 |
img.save(output_image_path, "PNG")
|
| 556 |
-
return
|
| 557 |
|
| 558 |
def UnknownTrackTexttoApp(text): #Copy of def OptimisedTtAppForUNWFWO(text):
|
| 559 |
#Buttons and labels autocreation
|
|
|
|
| 537 |
return noTonalMarksStr
|
| 538 |
|
| 539 |
|
| 540 |
+
# def add_text_to_image(input_image, text, output_image_path="output.png", border_size=2):
|
| 541 |
+
# text = removeTonalMarks(text)
|
| 542 |
+
# imagearr = np.asarray(input_image) #Image.open(input_image_path)
|
| 543 |
+
# width, height = imagearr.shape[:2] #width, height = image.size
|
| 544 |
+
# img = Image.fromarray(imagearr)
|
| 545 |
+
# draw = ImageDraw.Draw(img)
|
| 546 |
+
# font = ImageFont.truetype("ShortBaby.ttf", 36) #ShortBaby-Mg2w.ttf
|
| 547 |
+
# text_width, text_height = draw.textbbox((0, 0), text, font=font)[2:] #draw.textsize(text, font)
|
| 548 |
+
# # calculate the x, y coordinates of the text box
|
| 549 |
+
# x = (width - text_width) / 2
|
| 550 |
+
# y = (height - text_height) / 2
|
| 551 |
+
# # put the text on the image with a border
|
| 552 |
+
# for dx, dy in [(0, 0), (border_size, border_size), (-border_size, -border_size), (border_size, -border_size), (-border_size, border_size)]:
|
| 553 |
+
# draw.text((x + dx, y + dy), text, font=font, fill=(255, 255, 255))
|
| 554 |
+
# draw.text((x, y), text, font=font, fill=(0, 0, 0))
|
| 555 |
+
# img.save(output_image_path, "PNG")
|
| 556 |
+
# return "output.png"
|
| 557 |
+
|
| 558 |
+
|
| 559 |
+
def calculate_max_chars(image_width, font_size, font_path="ShortBaby.ttf", margin=20):
|
| 560 |
+
# Create a temporary image to calculate character width
|
| 561 |
+
img_temp = Image.new('RGB', (100, 100))
|
| 562 |
+
draw_temp = ImageDraw.Draw(img_temp)
|
| 563 |
+
font = ImageFont.truetype(font_path, font_size)
|
| 564 |
+
# Use a common character for width estimation and multiply by an adjustment factor
|
| 565 |
+
avg_char_width = draw_temp.textlength("W", font=font) #textsize("W", font=font)[0]
|
| 566 |
+
max_chars = int(image_width / avg_char_width) * 2
|
| 567 |
+
return max_chars
|
| 568 |
+
|
| 569 |
+
def fitimagetexttowidth(text, image_width, font_size, font_path="ShortBaby.ttf"):
|
| 570 |
+
max_chars = calculate_max_chars(image_width, font_size, font_path)
|
| 571 |
+
words = text.split()
|
| 572 |
+
adjusted_text = ""
|
| 573 |
+
line = ""
|
| 574 |
+
|
| 575 |
+
for word in words:
|
| 576 |
+
if len(line + word) <= max_chars:
|
| 577 |
+
line += word + " "
|
| 578 |
+
else:
|
| 579 |
+
adjusted_text += line.strip() + "\n"
|
| 580 |
+
line = word + " "
|
| 581 |
+
adjusted_text += line.strip()
|
| 582 |
+
|
| 583 |
+
return adjusted_text
|
| 584 |
+
|
| 585 |
+
def add_text_to_image(input_image, text, text_size=36, output_image_path="output.png", border_size=2, font_path="ShortBaby.ttf"):
|
| 586 |
text = removeTonalMarks(text)
|
| 587 |
+
imagearr = np.asarray(input_image)
|
| 588 |
+
height, width = imagearr.shape[:2]
|
| 589 |
+
text = fitimagetexttowidth(text, width, text_size, font_path)
|
| 590 |
img = Image.fromarray(imagearr)
|
| 591 |
+
|
| 592 |
draw = ImageDraw.Draw(img)
|
| 593 |
+
font = ImageFont.truetype(font_path, text_size)
|
| 594 |
+
# Recalculate position based on the entire block of text
|
| 595 |
+
text_width, text_height = draw.textbbox((0, 0), text, font=font)[2:]
|
| 596 |
x = (width - text_width) / 2
|
| 597 |
y = (height - text_height) / 2
|
| 598 |
+
|
| 599 |
+
# Add text with border
|
| 600 |
for dx, dy in [(0, 0), (border_size, border_size), (-border_size, -border_size), (border_size, -border_size), (-border_size, border_size)]:
|
| 601 |
draw.text((x + dx, y + dy), text, font=font, fill=(255, 255, 255))
|
| 602 |
draw.text((x, y), text, font=font, fill=(0, 0, 0))
|
| 603 |
img.save(output_image_path, "PNG")
|
| 604 |
+
return output_image_path
|
| 605 |
|
| 606 |
def UnknownTrackTexttoApp(text): #Copy of def OptimisedTtAppForUNWFWO(text):
|
| 607 |
#Buttons and labels autocreation
|