пример вывода
Вот над чем я сейчас работаю:
def add_text_overlay(image_path, text, font_path, emoji_font_path, font_size, text_spacing, x_padding, output_path,
text_position, offset_x, offset_y):
с PILImage.open(image_path) как img:
img =crop_and_resize(img, 1080, 1440)
Код: Выделить всё
draw = ImageDraw.Draw(img)
font = ImageFont.truetype(font_path, font_size)
# Load the emoji font using PIL
emoji_font = None
try:
emoji_font = ImageFont.truetype(emoji_font_path, 137) # Adjust pixel size as needed
except OSError as e:
logging.error(f"Unable to load the emoji font: {e}")
logging.error(f"Path checked: {os.path.abspath(emoji_font_path)}")
emoji_font = font # Fallback to regular font if emoji font fails
lines = wrap_text(text, 28)
fixed_line_height = font_size + text_spacing
total_text_height = fixed_line_height * len(lines)
initial_text_y = (img.height - total_text_height) / 2 + offset_y
for i, line in enumerate(lines):
text_bbox = draw.textbbox((0, 0), line, font=font)
text_width = text_bbox[2] - text_bbox[0]
if text_position == 'left':
text_x = x_padding + offset_x
elif text_position == 'right':
text_x = img.width - text_width - x_padding + offset_x
else:
text_x = (img.width - text_width) / 2 + offset_x
text_y = initial_text_y + i * fixed_line_height
if text_x < 0:
text_x = 0
if text_x + text_width > img.width:
text_x = img.width - text_width
# Draw each character with the appropriate font
for char in line:
char_font = emoji_font if is_emoji(char) else font # Use emoji font for emoji characters
draw.text((text_x, text_y), char, font=char_font, fill="black")
text_x += char_font.getbbox(char)[2] # Update this line to use getbbox
img.save(output_path)
Подробнее здесь: https://stackoverflow.com/questions/787 ... ith-colors