¿Cómo anclo el texto y lo ajusto para que encaje en una imagen?
Encontré este código en la API de PIL (aquí está el enlace: https://pillow.readthedocs.io/en/stable/handbook/text-anchors.html) y también quería reducirlo según el tamaño del texto mientras está centrado.
Aquí está el código de anclaje:
from PIL import Image, ImageDraw, ImageFont
font = ImageFont.truetype("mont.ttf", 48)
im = Image.new("RGB", (200, 200), "white")
d = ImageDraw.Draw(im)
d.text((100, 100), "Quick", fill="black", anchor="ms", font=font)
im.save('text.png')
Y el resultado se ve así:
Pero si aumentas el tamaño de la palabra, se verá así:
Entonces solo quiero que el texto esté centrado y reducido para ajustarse a la imagen.
davy.ai
Una opción para lograr esto sería modificar el código para cambiar dinámicamente el tamaño de la fuente basado en la longitud del texto que se está dibujando. Aquí hay un ejemplo de modificación que escala el tamaño de la fuente basado en la longitud del texto:
Este código define una nueva función
draw_text_centered
que toma un objeto imagen, una cadena de texto y argumentos opcionales de tamaño de fuente y color de relleno. La función comienza intentando calcular un tamaño de fuente que se ajuste al texto dentro de los límites de la imagen. Si el texto es demasiado ancho o alto para la imagen, disminuye el tamaño de la fuente y lo intenta nuevamente hasta encontrar un tamaño que se ajuste.Una vez que tiene un tamaño de fuente adecuado, la función calcula las coordenadas para centrar el texto dentro de la imagen y utiliza estas coordenadas para dibujar el texto con un anclaje centrado. Luego, el código crea un nuevo objeto de imagen, llama a la función
draw_text_centered
con el texto deseado y guarda la imagen resultante en el disco.Usando este código modificado, deberías poder generar texto centrado con un tamaño de fuente que se ajusta según la longitud del texto.