-
Notifications
You must be signed in to change notification settings - Fork 8
/
imagetext.py
55 lines (43 loc) · 2.06 KB
/
imagetext.py
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
"""the code adds text from files in the "text" folder to corresponding images in the "images" folder.
it uses a specified font and saves the resulting images with text to the "text-images" folder."""
import os
from PIL import Image, ImageDraw, ImageFont
base_path = os.getcwd()
text_folder = os.path.join(base_path, 'text')
image_folder = os.path.join(base_path, 'images')
output_folder = os.path.join(base_path, 'text-images')
font_path = os.path.join(base_path, 'font', 'font2.ttf')
def add_text_to_images():
for text_file, image_file in zip(sorted(os.listdir(text_folder)), sorted(os.listdir(image_folder))):
img_path = os.path.join(image_folder, image_file)
with Image.open(img_path) as img:
width, height = img.size
txt_path = os.path.join(text_folder, text_file)
with open(txt_path, 'r') as f:
text = f.read()
font_size = int(min(width, height) * 0.08)
font = ImageFont.truetype(font_path, font_size)
draw = ImageDraw.Draw(img)
x = 0
y = 10
words = text.split()
lines = []
current_line = words[0]
for word in words[1:]:
test_line = current_line + ' ' + word
bbox = draw.textbbox((0, 0), test_line, font=font)
test_width = bbox[2] - bbox[0]
if test_width <= width:
current_line = test_line
else:
lines.append(current_line)
current_line = word
lines.append(current_line)
for line in lines:
bbox = draw.textbbox((0, 0), line, font=font)
line_width = bbox[2] - bbox[0]
x = (width - line_width) // 2
draw.text((x, y), line, font=font, fill=(255, 255, 255))
y += bbox[3] - bbox[1]
output_path = os.path.join(output_folder, image_file)
img.save(output_path)