Aquí hay un kludge que funciona bien para mí. Es una variante de la respuesta de gnud. (Lo suficientemente diferente como para merecer una respuesta separada vs. comentario, espero.) He probado muchas ubicaciones de palabras y esto ha funcionado de manera consistente.
Cuando se dibuja un texto sin alcanzar completamente la altura de la fuente, puede producirse un recorte. Como notó gnud, al usar caracteres como "Aj" (yo uso "Fj") evitas este error.
Cada vez que se coloca una palabra:
1) Haz una draw.textsize (texto, fuente = fuente) con su palabra deseada. Almacenar el alto/ancho.
2) Agregue 'Fj' (spaceFJ) al final de la palabra, y vuelva a hacer el tamaño de texto y almacene el tercer alto/ancho.
4) Hará el dibujo de texto real con la palabra del ítem 2 (con el 'Fj' al final). Tener este apéndice evitará que la fuente se recorta.
4) Antes de hacer el dibujo de texto real, recorte la imagen donde aterrizará el 'Fj' (crop.load() es necesario para evitar una copia floja). Luego dibuja el texto y pasa la imagen recortada sobre el 'Fj'.
Este proceso evita el recorte, parece razonablemente efectivo y produce el texto completo, sin recortar. A continuación se muestra una copia/pega de una sección del código de Python que uso para esto. Ejemplo parcial, pero con un poco de suerte, agrega algunas ideas.
# note: xpos & ypos were previous set = coordinates for text draw
# the hard-coded addition of 4 to c_x likely will vary by font
# (I only use one font in this process, so kludged it.)
width, height = draw.textsize(word, font=font)
word2 = word + ' Fj'
width2, height2 = draw.textsize(word2, font=font)
# crop to overwrite ' Fj' with previous image bits
c_w = width2 - width
c_h = height2
c_x = xpos + width + 4
c_y = ypos
box = (c_x, c_y, c_x + c_w, c_y + c_h)
region = img.crop(box)
region.load()
draw.text((xpos, ypos), word2, (0,0,0), font=font)
img.paste(region, box)
Mejor díganos las fuentes específicas que ha probado y la plataforma en la que se encuentra. Acabo de probar aquí en Win7 con consola.ttf y no sobreescribo el fondo que ves. –
Desafortunadamente no tengo VeraSe.ttf aquí, y aún no me has mencionado en qué plataforma estás. Sospecho que Linux, no Windows, y que este es un problema específico de la plataforma que está teniendo. –
Esto también me está sucediendo con georgia.ttf (parte del paquete msttcorefonts) usando PIL 1.1.7 en Python 2.6 en Ubuntu 9.10. Parece que hay un problema con el PIL, donde el búfer al que temporalmente rinde no es lo suficientemente alto. –